在R中单独导入和处理多个My SQL表

问题描述 投票:2回答:2

我有一些位于mysql数据库中的汇总表。数据库名称标记如下。我已经创建了这些文件名列表 - databasenameslist

AAA_1
AAA_2
AAA_3
AAA_4
AAA_5
AAA_6
AAA_7

每个数据库都包含一个汇总表。这些名称如下,并以列表 - 查询列表的形式出现

AAA_1_Summary
AAA_2_Summary
AAA_3_Summary
AAA_4_Summary
AAA_5_Summary
AAA_6_Summary
AAA_7_Summary

每个表都有一组变量。我正在运行一个关于变量的随机森林。

表AAA_1

   Variable1    Variable2   Variable3   Outcome
     A           1           123         100
     B           2           145         150
     C           3           167         130
     D           4           111         111
     A           5           133         123
     B           6          131.6        111

我想通过RMySQL查询和for循环导入每个表。我想分别在每个表上运行一个随机林,输出应写入一系列单独的文件。

我试过以下代码

  require(RMySQL)# Import library
  require(DBI)# import library
  require(sqldf)# import library
  require(dbConnect)
  username = 'username'
  userpass = 'userpass'
  hostname = '111.11.11.1111'

  for (i in databasenameslist){
                      cdb<-i}
 for(i in querylist){
                      Query<- i}

  cdbconn = dbConnect(MySQL(), user=username, password=userpass, 
  dbname=cdb[i], 
  host=hostname)

上面的步骤是分别连接每个数据库。现在必须读取每个文件。为此,我使用以下代码。 database <-dbGetQuery(cdbconn,paste(querylist [i]))

上面的代码不起作用。

注意:最终解决方案与此代码类似:Write many files in a for loop

mysql r
2个回答
1
投票

我没有把随机森林的代码放在这里。我不熟悉给你答案,但也许你可以编辑这个循环来给你你想要的。但是这里是循环遍历数据库和汇总表的代码,并将每个查询的结果放入一个新的R数据框中。将cdbconn的代码与其余的密码和用户名变量一起移动。

`for (i in 1:length(databasenamelist)){
     query = sprintf('SELECT * FROM %s.%s',databasenamelist[i],querylist[i])
     assign(paste0('table',databasenamelist[i]), dbGetQuery(cdbconn, query))
}`

1
投票

考虑Map以元素方式遍历两个列表,因为您不需要嵌套循环。此外,将SELECT * FROM添加到您的查询列表名称以发送适当的SQL调用。

# IF QUERYLIST IS A CHARACTER VECTOR
querylist <- paste0("SELECT * FROM ", querylist)

# IF QUERYLIST IS A LIST
querylist <- lapply(querylist, function(q) paste0("SELECT * FROM ", q))

proc_data <- function(db, qry) {      
   conn <- dbConnect(MySQL(), user=username, password=userpass, dbname=db, host=hostname)
   df <- dbGetQuery(conn, qry)    
   dbDisconnect(conn)

   # ... DO OTHER WORK ON DF: random forest, csv output    

   return(df)    # OR WHATEVER OTHER OBJ IN PROCESSING
}

df_List <- Map(proc_data, databasenameslist, querylist)
© www.soinside.com 2019 - 2024. All rights reserved.