2015-05-04

Error: No Such Column using SQLDF

Title El paquete SQLDF permite ejecutar sentencias SQL sobre data frames en R.

Error

Cuando los nombres de las columnas incluyen puntos se genera el siguiente error.

library(sqldf)
sqldf('SELECT Species, Sepal.Length 
      FROM iris 
      WHERE Species = "virginica" LIMIT 5')
Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: no such column: Sepal.Length

Solución

Entrecomillamos dichas columnas, con comillas inglesas " o acentos graves `.

ssqldf('SELECT Species, "Sepal.Length" 
      FROM iris 
      WHERE Species = "virginica" LIMIT 5')
sqldf('SELECT Species, `Sepal.Length` 
      FROM iris 
      WHERE Species = "virginica" LIMIT 5')
    Species Sepal.Length
1 virginica          6.3
2 virginica          5.8
3 virginica          7.1
4 virginica          6.3
5 virginica          6.5

Notas

Anteriormente era preciso sustituir los puntos por guiones bajos, pero ya no es necesario:

Staring with RSQLite 1.0.0 and sqldf 0.4-9 dots in column names are no longer translated to underscores.
If you are using an older version of these packages then note that since dot is an SQL operator the RSQLite driver package converts dots to underscores so that SQL statements can reference such columns unquoted.

Separadores

El tipo de comillas empleado en la sentencia es incompatible con su uso para entrecomillar los nombres de columnas o de cláusulas tal y como refleja el cuadro anterior.

Las sentencias SQL deben de ir entrecomilladas por comillas inglesas o simples.
Los nombres de columnas con puntos deben de ir entrecomillados por comillas inglesas o acentos graves.
Las cláusulas como WHERE deben de ir entrecomillada por comillas inglesas o simples.

Por ello, todas la consultas siguientes generarían un error.

sqldf("SELECT Species, `Sepal.Length` 
      FROM iris 
      WHERE Species = "virginica" LIMIT 5")
sqldf("SELECT Species, "Sepal.Length" 
      FROM iris 
      WHERE Species = 'virginica' LIMIT 5")
sqldf('SELECT Species, `Sepal.Length` 
      FROM iris 
      WHERE Species = 'virginica' LIMIT 5')
Error: unexpected symbol in:
Si utilizamos por ejemplo RStudio, en el R Script nos aparecerá en resaltada en un color diferente —negro en lugar de verde— la parte entrecomillada erróneamente.

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos