2012-04-19 14 views
14

Podczas korzystania z RPostgreSQL uważam, że nie mogę używać sqldf w ten sam sposób. Na przykład, jeśli załadować biblioteki i czytać w danych w ramce danych za pomocą następującego kodu:Używanie sqldf i RPostgreSQL razem

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) 

Wiem mieć zawartość tej tabeli w dataframe df. Jednak jeśli chcemy uruchomić polecenie SQL przy użyciu sqldf chciałbym wcześniej zrobić coś takiego:

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

To już nie działa jak otrzymuję komunikat o błędzie:

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

zakładam to błąd operatora z mojej strony, ale nie wiem, jakie argumenty dostarczyć do sqldf, aby skupić się tylko na ramce danych i nie próbować łączyć się z niczym innym.

Odpowiedz

19

Korzystanie sqldf z RPostgreSQL

sqldf automatycznie pracować z bazy danych w PostgreSQL test jeśli widzi, że RPostgreSQL jest załadowany. Możesz więc utworzyć bazę danych PostgreSQL w wersji test, a następnie użyć polecenia sqldf z tym, aby uzyskać nazwę innej bazy danych.

Patrz: sqldf FAQ 12

Korzystanie sqldf z RSQLite

Jeśli chcesz użyć sqldf z RSQLite zamiast z RPostgreSQL można użyć sqldf „s drv argumentu, aby zmusić go użyć inny niż domyślny sterownik . na przykład

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

lub można ustawić sterownik globalnie za pomocą opcji "sqldf.driver". Od wewnątrz R:

options(sqldf.driver = "SQLite") 

lub inna możliwość, jeśli chcesz używać RSQLite jest detach RPostgreSQL przed użyciem sqldf i załadować go ponownie później.

Aby uzyskać szczegółowe informacje, patrz ?sqldf.

6

Miałem ten sam błąd i odłączyłem pakiet RPostgeSQL, ponownie uruchomiłem mój kod sqldf i działało dobrze r detach("package:RPostgreSQL", unload=TRUE)

Powiązane problemy