我在mysql数据库中有许多摘要表。数据库名称的标签如下。我已经创建了这些文件名的列表-
数据库名称列表
AAA_1
AAA_2
AAA_3
AAA_4
AAA_5
AAA_6
AAA_7
每个数据库都包含一个摘要表。它们的名称如下所示,并以list-querylist的形式
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)
上述步骤是分别连接每个数据库。现在必须读取每个文件。为此,我使用以下代码。
数据库上面的代码不起作用。
注:最终解决方案类似于此代码:Write many files in a for loop
最佳答案
考虑Map
遍历两个list元素,因为不需要嵌套循环。另外,将SELECT * FROM
添加到您的querylist名称以发送appropariate 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)