2012-04-19 12 views
14

Bei der Verwendung von RPostgreSQL finde ich, dass ich sqldf nicht auf die gleiche Weise verwenden kann. Zum Beispiel, wenn ich die Bibliothek laden und in Daten in einen Datenrahmen mit dem folgenden Code lesen: dfMit sqldf und RPostgreSQL zusammen

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) 

ich weiß, hat den Inhalt dieser Tabelle in dem Datenrahmen. Allerdings, wenn ich einen SQL-Befehl sqldf ausführen wollen würde ich vorher etwas tun, wie folgt aus:

sqldf("SELECT * FROM df WHERE X > 10") 

Dies funktioniert nicht mehr, wie ich die Fehlermeldung:

Error in postgresqlNewConnection(drv, ...) : 
    RS-DBI driver: (could not connect [email protected] on dbname "test" 
) 
Error in !dbPreExists : invalid argument type 

Ich nehme an, dies ist Bedienerfehler meinerseits, aber ich kann nicht herausfinden, welche Argumente an sqldf zu liefern, so dass es nur auf den Datenrahmen konzentriert und versucht nicht, sich mit etwas anderem zu verbinden.

Antwort

19

Mit sqldf mit RPostgreSQL

sqldf wird mit der test Datenbank in PostgreSQL automatisch funktionieren, wenn sie sieht, dass RPostgreSQL geladen wird. So können Sie eine test Datenbank in PostgreSQL erstellen und dann sqldf mit dieser

verwenden, oder Sie können den Namen einer anderen Datenbank angeben.

See: sqldf FAQ 12

Mit sqldf mit RSQLite

Wenn Sie sqldf mit RSQLite verwenden möchten, anstatt mit RPostgreSQL Sie sqldf ‚s drv Argument verwenden können, um eine nicht-Standard-Treiber verwenden zu erzwingen . z.B.

oder Sie können den Treiber global mit der Option "sqldf.driver" einstellen. Aus R:

options(sqldf.driver = "SQLite") 

oder eine andere Möglichkeit, wenn Sie RSQLite ist detach RPostgreSQL, bevor Sie sqldf verwenden und laden Sie es danach wieder verwenden möchten.

Weitere Informationen finden Sie unter ?sqldf.

6

hatte ich den gleichen Fehler und ich das RPostgeSQL Paket freistehend, meinen sqldf Code erneut ausführen, und es funktionierte gut r detach("package:RPostgreSQL", unload=TRUE)

Verwandte Themen