我已经使用以下代码成功地将所有MySQL表加载到尽可能多的数据框变量中,所有数据框变量都与表名相同(这是个人学习)。我的问题是:有没有更好的方法,因为我觉得这很慢。
db<-dbConnect(MySQL(),user='****',password="****",dbname="****",host='XX.XXX.XXX.XX')
tables<-dbListTables(db)
#load all tables in variables with same name as the MySQL table name.
#warning : this loop will take more than 90 seconds to complete and will download all the MySQL tables.
for (i in 1:NROW(tables)){
assign(tables[i],dbReadTable(db,tables[i]))
}
#release the DB
dbDisconnect(db)
这是地球上最快的方法吗?
答案 0 :(得分:3)
如图所示,请考虑将所有MySQL表保存到许多数据帧的 one 列表中,这样可以避免在全局环境中管理许多对象。下面甚至将列表元素命名为相应的表名,可以使用ConstraintLayout
或$
索引来引用:
[[..]]
因此,您可以按索引访问每个数据框并运行任何数据框操作,就像它们是独立的对象一样:
# DATA FRAME LIST OF NAMED ELEMENTS
dfList <- setNames(lapply(tables, function(t) dbReadTable(db, t)), tables)
dfList$table1Name
dfList[["table2Name"]]
...
现在,如果您确实想要多个变量,请使用aggregate(.~Group1 + Group2, dfList$table1Name, FUN=sum)
merge(dfList$table1Name, dfList$table2Name, by="joinkey")
by(dfList$table1Name, dfList$table1Name[c("factor1", "factor2")], FUN=summary)
将列表元素输出到单独的对象:
list2env