首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时使用sqldf和RPostgreSQL

同时使用sqldf和RPostgreSQL
EN

Stack Overflow用户
提问于 2012-04-20 05:32:15
回答 2查看 11.1K关注 0票数 15

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

代码语言:javascript
复制
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) 

我知道在dataframe df中有这个表的内容。但是,如果我想使用sqldf运行SQL命令,我以前会这样做:

代码语言:javascript
复制
sqldf("SELECT * FROM df WHERE X > 10")

当我收到错误消息时,这不再起作用:

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

我假设这是我的操作员错误,但我不知道如何向sqldf提供什么参数,以便它只关注数据帧,而不尝试连接到其他任何东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-20 05:57:07

结合使用sqldf和RPostgreSQL的

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

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

请参阅:sqldf FAQ 12

结合使用sqldf和RSQLite

如果你想在RSQLite中使用sqldf而不是RPostgreSQL,你可以使用sqldfdrv参数来强制它使用非默认的驱动程序。

代码语言:javascript
复制
sqldf("select foo from bar...",drv="SQLite")

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

代码语言:javascript
复制
options(sqldf.driver = "SQLite")

或者,如果您希望使用RSQLite,另一种可能是在使用sqldf之前对RPostgreSQL执行detach命令,然后在之后再次加载它。

详情请参见?sqldf

票数 22
EN

Stack Overflow用户

发布于 2015-02-02 12:43:59

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10237113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档