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。ただし、を使用して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これは私の側のオペレーターエラーだと思いますが、データフレームに焦点を合わせ、他のものに接続しようとしないように、どの引数を提供するかがわかりません。

4

2 に答える 2

22

RPostgreSQLでのsqldfの使用

sqldftestRPostgreSQLがロードされていることを確認すると、PostgreSQLのデータベースで自動的に機能します。したがって、PostgreSQLでデータベースを作成し、それでtestsqldfを使用できます。

または、別のデータベースの名前を指定できます。

参照:sqldf FAQ 12

RSQLiteでのsqldfの使用

RPostgreSQLではなくRSQLiteでsqldfを使用する場合は、sqldfdrv引数を使用して、デフォルト以外のドライバーを使用するように強制できます。例えば

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

または、"sqldf.driver"オプションを使用してドライバーをグローバルに設定できます。R内から:

options(sqldf.driver = "SQLite")

または、RSQLiteを使用する場合の別の可能性は、sqldfをdetach使用する前にRPostgreSQLを実行し、後で再度ロードすることです。

詳細?sqldfはをご覧ください。

于 2012-04-19T21:57:06.810 に答える
7

同じエラーが発生し、RPostgeSQLパッケージをデタッチし、sqldfコードを再実行すると、正常に機能しました。r detach("package:RPostgreSQL", unload=TRUE)

于 2015-02-02T04:43:58.773 に答える