2013-04-09 45 views
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字段(或基于第二个列表的字段)做什么?

回答

2

可以使用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) 
+0

我做了一个小编辑(放在循环通道),并得到了它完美的工作。万分感谢,我知道必须有一个简单的方法来做到这一点。 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