几年后,我刚刚回到 R 的土地,并遇到了使用 sqlSave 通过循环传递变量的问题。我已经在 Win7 机器上启动了 RODBC 并与 MySQL 一起顺利运行,但似乎无法让我的循环工作。这是我拥有的数据以及我想要完成的任务:
- 使用itchRX库将2012年MLB逐场比赛数据保存为一个名为“mlb12”的单个“值”,并具有多个表
- “mlb12”内部有七个 table (atbat、pitch、game、player、runner、umpire、coach)
- 我想创建一个循环,为 R 中的每个表创建一个数据框,这样我就可以使用 sqlSave 将它们传递到循环中,将它们插入到我的 MySQL 数据库中
- 我已经将所有这些表插入到我的 MySQL 数据库中,但我采用了“长”方式(即声明每个 DF 并为每个插入创建一个 sqlSave 语句),并且更愿意在两个循环中进行清理上代码。
- 下面是我目前必须抓取这些数据并将其插入 MySQL 数据库的代码:
库(RODBC)
<前>库(pitchRx)
mlb12 <- scrapeFX(开始 = "2012-04-05", 结束 = "2012-04-07",
表=列表(atbat=字段$atbat,音调=字段$音调,
游戏=字段$游戏,玩家=字段$玩家,
运行者=田野$运行者,裁判员=田野$裁判员,
教练=场$教练))
atbat <- mlb12$atbat
音高 <- mlb12$音高
游戏 <- mlb12$游戏
球员 <- mlb12$球员
运行者 <- mlb12$runner
裁判<- mlb12$裁判
教练 <- mlb12$教练
channel <- odbcConnect("db", uid = "cs", pwd = "pw")
sqlSave( channel ,mlb12$atbat,表名=“atbat”)
sqlSave( channel ,mlb12$pitch,表名=“pitch”)
sqlSave( channel ,mlb12$游戏,表名=“游戏”)
sqlSave( channel ,mlb12$玩家,表名=“玩家”)
sqlSave( channel ,mlb12$runner,表名=“runner”)
sqlSave( channel ,mlb12$umpire,表名=“umpire”)
sqlSave( channel ,mlb12$教练,表名=“教练”)
关闭( channel )
我尝试编写的循环(用于设置数据帧和简化 sqlSave 语句)都未能正确执行。这是我尝试过的一个示例,我认为它会起作用:
i<-0
while (i<6) {
i<-i+1
a<-c("atbat","pitch","game","player","runner","umpire","coach")
b<-paste("mlb12$",a,sep="")
c[[i]]<-paste("test",i,sep="")
}
这个循环的问题是我不记得如何(或弄清楚如何)使用 c[[i]] 增量字段来获取“b”值来为每个表创建数据框列表。我相当确定,如果我能解决这个问题,我就能得到一个循环来处理“sqlSave”部分。有没有办法完成我想要对自动增量字段(或基于第二个列表的字段)执行的操作?
最佳答案
您可以使用lapply
,如下所示:
channel <- odbcConnect("db", uid = "cs", pwd = "pw")
a<-c("atbat","pitch","game","player","runner","umpire","coach")
lapply(a,function(x)
sqlSave(channel,mlb12[[x]],tablename=x)
close(channel)
关于mysql - R sqlSave 字符串变量循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15913583/