Như Arun đã chỉ ra trong nhận xét bạn chỉ có thể sử dụng setDT
trên kết quả dbGetQuery
.
Ngoài ra, còn có chức năng trợ giúp có sẵn trong gói của tôi dwtools mở rộng tính năng này cho tự động setkey
khi cần. Điều này được thiết kế hữu ích khi chuỗi. Nó cũng thống nhất giao diện với các nhà cung cấp cơ sở dữ liệu khác để bạn có thể chuỗi data.table bằng cách sử dụng các cơ sở dữ liệu khác nhau.
Các đơn giản chọn sử dụng sẽ trông giống như:
my_dt = db("SELECT * FROM eqtl")
# to setkey use
db("SELECT * FROM eqtl", key="mykeycol")
dụ nặng nề kéo dài từ gói thủ công:
jj_aggr = quote(list(amount=sum(amount), value=sum(value)))
r <- db("sales",key="geog_code" # read fact table from db
)[,eval(jj_aggr),keyby=c("geog_code","time_code") # aggr by geog_code and time_code
][,db(.SD) # write to db, auto.table.name
][,db("geography",key="geog_code" # read lookup geography dim from db
)[.SD # left join geography
][,eval(jj_aggr), keyby=c("time_code","geog_region_name")] # aggr
][,db(.SD) # write to db, auto.table.name
][,db("time",key="time_code" # read lookup time dim from db
)[.SD # left join time
][, eval(jj_aggr), keyby=c("geog_region_name","time_month_code","time_month_name")] # aggr
][,db(.SD) # write to db, auto.table.name
]
Nó sẽ đọc dữ liệu từ nhiều cơ sở dữ liệu, tham gia, uẩn, lưu kết quả trung gian cho nhiều cơ sở dữ liệu.
Có lẽ không phải là câu trả lời bạn đang tìm kiếm (?), Nhưng nếu bạn đã đọc nó dưới dạng 'data.frame', bạn có thể sử dụng' setDT() 'để chuyển nó thành' data.table' * theo tham chiếu * (chuyển đổi phải là ngay lập tức từ data.frame thành data.table) - tức là 'data <- dbGetQuery (...); setDT (dữ liệu) '. – Arun
@Arun cảm ơn, đây có lẽ là những gì tôi sẽ làm, mặc dù tôi đã có thể muốn loại bỏ 'data.frame' từ phương trình hoàn toàn. – rmccloskey