2012-04-19 11 views
14

Al usar RPostgreSQL me parece que no puedo usar sqldf de la misma manera. Por ejemplo, si me carga la biblioteca y leer datos en una trama de datos usando el siguiente código:Usando sqldf y RPostgreSQL juntos

library(RPostgreSQL) 
drv <- dbDriver("PostgreSQL") 
con <- dbConnect(drv, host="localhost", user="postgres", password="xxx", dbname="yyy", port="5436") 
rs <- dbSendQuery(con, "select * from table");       
df<- fetch(rs, n = -1); dbClearResult(rs) 
dbDisconnect(con) 

que conozco tienen los contenidos de esta tabla en la trama de datos df. Sin embargo, si quiero ejecutar un comando SQL mediante sqldf lo haría con anterioridad algo como esto:

sqldf("SELECT * FROM df WHERE X > 10") 

Esto ya no funciona como consigo el mensaje de error:

Error in postgresqlNewConnection(drv, ...) : 
    RS-DBI driver: (could not connect [email protected] on dbname "test" 
) 
Error in !dbPreExists : invalid argument type 

Asumo que esto es un error del operador de mi parte, pero no puedo imaginarme qué argumentos suministrar a sqldf para que solo se concentre en el marco de datos y no intente conectarse a ninguna otra cosa.

Respuesta

19

Usando sqldf con RPostgreSQL

sqldf funcionará automáticamente con la base de datos PostgreSQL test en si ve que RPostgreSQL se carga. Entonces puede crear una base de datos test en PostgreSQL y luego usar sqldf con ese

o puede especificar el nombre de una base de datos diferente.

Ver: sqldf FAQ 12

Usando sqldf con RSQLite

Si desea utilizar sqldf con RSQLite en lugar de con RPostgreSQL puede utilizar sqldf 's drv argumento para obligar a que utilice un conductor no predeterminado . p.ej.

sqldf("select foo from bar...",drv="SQLite") 

o, puede configurar el controlador de forma global con la opción "sqldf.driver". Desde dentro de R:

options(sqldf.driver = "SQLite") 

o, otra posibilidad si desea utilizar RSQLite es detach RPostgreSQL antes de utilizar sqldf y cargarlo de nuevo después.

Ver ?sqldf para más detalles.

6

Tuve el mismo error y extraje el paquete RPostgeSQL, vuelva a ejecutar mi código sqldf y funcionó bien r detach("package:RPostgreSQL", unload=TRUE)