小编典典

一起使用sqldf和RPostgreSQL

sql

使用时,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)

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

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以便它只关注数据帧,而不尝试连接到其他任何对象。


阅读 219

收藏
2021-03-17

共1个答案

小编典典

在RPostgreSQL中使用sqldf

sqldf``test如果看到RPostgreSQL已加载,它将自动与PostgreSQL中的数据库一起使用。因此,您可以test在PostgreSQL中创建数据库,然后在其中使用sqldf

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

请参阅:sqldf常见问题12

在RSQLite中使用sqldf

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

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

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

options(sqldf.driver = "SQLite")

或者,如果您希望使用RSQLite,则另一种可能性是detach先使用RPostgreSQL,再使用sqldf,然后再加载它。

有关?sqldf详细信息,请参见。

2021-03-17