使用时,RPostgreSQL我发现不能sqldf以相同的方式使用。例如,如果我加载库并使用以下代码将数据读入数据帧:
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,则以前会做类似这样的事情:
df
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以便它只关注数据帧,而不尝试连接到其他任何对象。
在RPostgreSQL中使用sqldf
sqldf``test如果看到RPostgreSQL已加载,它将自动与PostgreSQL中的数据库一起使用。因此,您可以test在PostgreSQL中创建数据库,然后在其中使用sqldf
sqldf``test
test
或者,您可以指定其他数据库的名称。
请参阅:sqldf常见问题12
在RSQLite中使用sqldf
如果您想将sqldf与RSQLite一起使用,而不是与RPostgreSQL一起使用,则可以使用sqldf的drv参数来强制它使用非默认驱动程序。例如
drv
sqldf("select foo from bar...",drv="SQLite")
或者,您可以使用该"sqldf.driver"选项在全局范围内设置驱动程序。从R内:
"sqldf.driver"
options(sqldf.driver = "SQLite")
或者,如果您希望使用RSQLite,则另一种可能性是detach先使用RPostgreSQL,再使用sqldf,然后再加载它。
detach
有关?sqldf详细信息,请参见。
?sqldf