2
我刚刚在几年之后跳回R的土地,并遇到了一个问题,通过循环与sqlSave传递变量。我已经让RODBC在Win7上运行MySQL并顺利运行,但似乎无法让我的循环正常工作。以下是我正在试图完成什么样的数据我有什么:R sqlSave字符串变量循环问题
- MLB播放,通过播放数据,2012年使用保存为一个“价值”被称为“mlb12”多个表的pitchRX库
- “mlb12”里面有七个表格(atbat,pitch,game,player,runner,nmpire,coach)
- 我想创建一个循环,为R中的每个表创建一个数据框,通过一个循环与他们通过sqlSave插入到我的MySQL数据库
- 我已经把所有这些表插入到我的MySQL数据库,但我做到了“长”的方式(即宣布每个D F和为每个插入创建一个sqlSave语句),并希望在两个循环中执行它们以清理代码。
- 下面是我目前有凑这个数据,并将其插入到MySQL数据库的代码:
library(RODBC)
library(pitchRx)
mlb12 <- scrapeFX(start = "2012-04-05", end = "2012-04-07",
tables=list(atbat=fields$atbat,pitch=fields$pitch,
game=fields$game,player=fields$player,
runner=fields$runner,umpire=fields$umpire,
coach=fields$coach))
atbat <- mlb12$atbat
pitch <- mlb12$pitch
game <- mlb12$game
player <- mlb12$player
runner <- mlb12$runner
umpire<- mlb12$umpire
coach <- mlb12$coach
channel <- odbcConnect("db", uid = "cs", pwd = "pw")
sqlSave(channel,mlb12$atbat,tablename="atbat")
sqlSave(channel,mlb12$pitch,tablename="pitch")
sqlSave(channel,mlb12$game,tablename="game")
sqlSave(channel,mlb12$player,tablename="player")
sqlSave(channel,mlb12$runner,tablename="runner")
sqlSave(channel,mlb12$umpire,tablename="umpire")
sqlSave(channel,mlb12$coach,tablename="coach")
close(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”部分。有没有办法做我想用autoincremental字段(或基于第二个列表的字段)做什么?
我做了一个小编辑(放在循环通道),并得到了它完美的工作。万分感谢,我知道必须有一个简单的方法来做到这一点。 lapply(a,function(x){channel <-odbcConnect()){a <-c(“atbat”,“pitch”,“game”,“player”,“runner”,“ (channel,mlb12 [[x]],tablename = x,append = TRUE)close(channel)})'sqlSave(“db”,uid =“uid”,pwd =“pw”) ' – 2013-04-10 17:59:31