一起使用sqldf和RPostgreSQL

时间:2012-04-19 21:32:15

标签: sql r postgresql sqldf rpostgresql

使用RPostgreSQL时,我发现我无法以同样的方式使用sqldf。例如,如果我使用以下代码加载库并将数据读入数据框:

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) 

我知道数据框df中包含此表的内容。但是,如果我想使用sqldf运行SQL命令,我之前会做这样的事情:

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

这不再有效,因为我收到错误消息:

Error in postgresqlNewConnection(drv, ...) : 
  RS-DBI driver: (could not connect postgres@localhost on dbname "test"
)
Error in !dbPreExists : invalid argument type

我认为这是我操作员的错误,但我无法确定如何向sqldf提供什么参数,以便它只关注数据框而不会尝试连接到其他任何内容。 / p>

2 个答案:

答案 0 :(得分:20)

将sqldf与RPostgreSQL一起使用

如果发现RPostgreSQL被加载,

sqldf将自动使用PostgreSQL中的test数据库。因此,您可以在PostgreSQL中创建一个test数据库,然后将sqldf与

一起使用

或者,您可以指定其他数据库的名称。

请参阅:sqldf FAQ 12

将sqldf与RSQLite一起使用

如果要将sqldf与RSQLite而不是RPostgreSQL一起使用,可以使用sqldf的{​​{1}}参数强制它使用非默认驱动程序。例如

drv

或者,您可以使用sqldf("select foo from bar...",drv="SQLite") 选项全局设置驱动程序。从R:

"sqldf.driver"

或者,如果您希望使用RSQLite,另一种可能性是options(sqldf.driver = "SQLite") RPostgreSQL,然后再使用sqldf并在之后重新加载。

有关详细信息,请参阅detach

答案 1 :(得分:7)

我有同样的错误,我分离了RPostgeSQL包,重新运行我的sqldf代码,它运行良好r detach("package:RPostgreSQL", unload=TRUE)