2012-04-19 31 views
14

Khi sử dụng RPostgreSQL Tôi thấy rằng tôi không thể sử dụng sqldf theo cách tương tự. Ví dụ nếu tôi tải thư viện và đọc dữ liệu vào một khung dữ liệu bằng cách sử dụng đoạn mã sau:Sử dụng sqldf và RPostgreSQL cùng nhau

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) 

Tôi biết có các nội dung của bảng này trong dataframe df. Tuy nhiên nếu tôi muốn chạy một lệnh SQL sử dụng sqldf tôi trước đây sẽ làm một cái gì đó như thế này:

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

này không còn hoạt động khi tôi nhận được thông báo lỗi:

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

Tôi giả định này là lỗi điều hành về phía tôi, nhưng tôi không thể tìm ra cách đối số cung cấp cho sqldf để nó chỉ tập trung vào khung dữ liệu và không cố gắng kết nối với bất kỳ thứ gì khác.

Trả lời

19

Sử dụng sqldf với RPostgreSQL

sqldf sẽ tự động làm việc với cơ sở dữ liệu test trong PostgreSQL nếu nó thấy rằng RPostgreSQL được tải. Vì vậy, bạn có thể tạo cơ sở dữ liệu test trong PostgreSQL và sau đó sử dụng sqldf với

hoặc, bạn có thể chỉ định tên của cơ sở dữ liệu khác.

Xem: sqldf FAQ 12

Sử dụng sqldf với RSQLite

Nếu bạn muốn sử dụng sqldf với RSQLite hơn với RPostgreSQL bạn có thể sử dụng sqldf 's drv lập luận để buộc nó sử dụng một trình điều khiển không phải mặc định . ví dụ.

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

hoặc, bạn có thể đặt trình điều khiển toàn cầu bằng tùy chọn "sqldf.driver". Từ bên trong R:

options(sqldf.driver = "SQLite") 

hay, một khả năng nếu bạn muốn sử dụng RSQLite là detach RPostgreSQL trước khi sử dụng sqldf và tải nó một lần nữa sau đó.

Xem ?sqldf để biết chi tiết.

6

Tôi đã gặp lỗi tương tự và tôi đã tháo gói RPostgeSQL, chạy lại mã sqldf của tôi và nó hoạt động tốt r detach("package:RPostgreSQL", unload=TRUE)

Các vấn đề liên quan