2012-04-19 3 views
14

При использовании RPostgreSQL я обнаружил, что я не могу использовать sqldf таким же образом. Например, если я загрузить библиотеку и читать данные в кадр данных, используя следующий код:Использование sqldf и RPostgreSQL вместе

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 [email protected] on dbname "test" 
) 
Error in !dbPreExists : invalid argument type 

Я полагаю, что это ошибка оператора с моей стороны, но я не могу понять, какие аргументы поставлять в sqldf, так что он просто фокусируется на кадре данных и не пытается подключиться ни к чему другому.

ответ

19

Использование sqldf с RPostgreSQL

sqldf будет автоматически работать с базой данных test в PostgreSQL, если он видит, что загружается RPostgreSQL. Таким образом, вы можете создать базу данных test в PostgreSQL, а затем использовать sqldf с этим

или вы можете указать имя другой базы данных.

См: sqldf FAQ 12

Использование sqldf с RSQLite

Если вы хотите использовать sqldf с RSQLite, а не с RPostgreSQL вы можете использовать sqldf «s drv аргумент, чтобы заставить его использовать драйвер не по умолчанию , например

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

или, вы можете установить драйвер глобально с помощью опции "sqldf.driver". Изнутри R:

options(sqldf.driver = "SQLite") 

или другая возможность, если вы хотите использовать RSQLite является detach RPostgreSQL, прежде чем использовать sqldf и загрузить его снова после этого.

Подробнее см. ?sqldf.

6

У меня была такая же ошибка, и я отключил пакет RPostgeSQL, перезагрузил мой код sqldf, и он работал нормально r detach("package:RPostgreSQL", unload=TRUE)

Смежные вопросы