将所有 MYSQL 表加载到具有相同名称的数据框中
load all the MYSQL tables into data frames with same names
我已经使用以下代码成功地将所有 MySQL table 加载到尽可能多的数据帧变量中,所有名称都与 table 名称相同(这是个人学习)。我的问题是:有没有更好的方法,因为我感觉这很慢。
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)
这是地球上最快的方法吗?
如图所示,考虑将所有 MySQL table 保存到 一个 多个数据帧列表中,这样可以避免在全局环境中管理许多对象。下面甚至将列表元素命名为相应的 table 名称,可以使用 $
或 [[..]]
索引进行引用:
# 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
将列表元素输出到单独的对象:
list2env(dfList, envir=.GlobalEnv)
我已经使用以下代码成功地将所有 MySQL table 加载到尽可能多的数据帧变量中,所有名称都与 table 名称相同(这是个人学习)。我的问题是:有没有更好的方法,因为我感觉这很慢。
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)
这是地球上最快的方法吗?
如图所示,考虑将所有 MySQL table 保存到 一个 多个数据帧列表中,这样可以避免在全局环境中管理许多对象。下面甚至将列表元素命名为相应的 table 名称,可以使用 $
或 [[..]]
索引进行引用:
# 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
将列表元素输出到单独的对象:
list2env(dfList, envir=.GlobalEnv)