2

数年ぶりに R の世界に戻ってきたところですが、sqlSave を使用してループを介して変数を渡す際に問題が発生しています。Win7 ボックスで RODBC を立ち上げ、MySQL でスムーズに実行していますが、ループが機能していないようです。私が持っているデータと私が達成しようとしていることは次のとおりです。

  • 複数のテーブルを持つ「mlb12」と呼ばれる単一の「値」として保存された、pitchRX ライブラリを使用した 2012 年の MLB 実況データ
  • 「mlb12」には、7 つのテーブル (打席、ピッチ、ゲーム、プレーヤー、ランナー、審判、コーチ) があります。
  • R 内でこれらの各テーブルのデータ フレームを作成するループを作成したいので、それらを sqlSave を使用してループに渡し、MySQL データベースに挿入できます。
  • これらのテーブルはすべて MySQL データベースに既に挿入していますが、「長い」方法で (つまり、各 DF を宣言し、挿入ごとに sqlSave ステートメントを作成する) 行っており、コードをクリーンアップするために 2 つのループでそれらを実行することを好みます。 .
  • 以下は、このデータをスクレイピングして 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」セクションでループを機能させることができると確信しています。自動インクリメンタル フィールド (または 2 番目のリストに基づくフィールド) でやろうとしていることを行う方法はありますか?

4

1 に答える 1