2013-04-09 31 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