15

使用时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以便它只关注数据框而不尝试连接到其他任何东西。

4

2 回答 2

22

将 sqldf 与 RPostgreSQL 一起使用

sqldftest如果发现 RPostgreSQL 已加载,它将自动使用 PostgreSQL 中的数据库。所以你可以在 PostgreSQL 中创建一个test数据库,然后使用 sqldf

或者,您可以指定不同数据库的名称。

请参阅:sqldf 常见问题解答 12

将 sqldf 与 RSQLite 一起使用

如果您想将 sqldf 与 RSQLite 一起使用而不是与 RPostgreSQL 一起使用,您可以使用sqldf'drv参数强制它使用非默认驱动程序。例如

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

"sqldf.driver"或者,您可以使用该选项全局设置驱动程序。从 R 内部:

options(sqldf.driver = "SQLite")

或者,如果您希望使用 RSQLite,另一种可能性是在使用detachsqldf 之前使用 RPostgreSQL 并在之后再次加载它。

详情请参阅?sqldf

于 2012-04-19T21:57:06.810 回答
7

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

于 2015-02-02T04:43:58.773 回答