将所有 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)