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