-2

サンプルコードがあるとしましょう

kkk<-data.frame(m.mean=1:1000, m.sd=1:1000/20)
kkk[,3:502]<-NA

for (i in 1:nrow(kkk)){
  kkk[i,3:502]<-rnorm(n=500, mean=kkk[i,1], sd=kkk[i,2])
}

この関数を と並行して実行するように変換したいと思いdoMCます。私の問題は、foreach結果がリストになることですが、各反復の結果をデータフレームに転送できるベクトルにする必要があります(後でさらに処理するためにCVSとしてエクスポートされます)。

何か案は?

4

1 に答える 1

1

このためのループは必要ありません。また、行列として扱うためだけに大きな行列をデータ フレームに入れることは非効率的です (ただし、すべての計算を順番に実行した、最後にデータ フレームを作成する必要がある場合があります)。 CSV ファイルに書き込みます)。

m.mean <- 1:1000
m.sd <- 1:1000/20
num.columns <- 500
x <- matrix(nrow=length(m.mean), ncol=num.columns, 
            data=rnorm(n=length(m.mean) * num.columns))
x <- x * cbind(m.sd)[,rep(1,num.columns)] + cbind(m.mean)[,rep(1,num.columns)]
kkk <- data.frame(m.mean=m.mean, m.sd=m.sd, unname(x))
write.csv(kkk, "kkk.txt")

foreach ループから既存のデータ構造に直接結果を代入することに関する最初の質問に答えるには、それは不可能です。foreach パッケージの並列バックエンドは、個別の R プロセスで各計算を実行するように設計されているため、それぞれが個別のオブジェクトを親プロセスに返す必要があり、親プロセスは.combineforeach に提供された関数を使用してそれらを収集します。変数に直接代入する並列 foreach ループを作成することもできますがkkk、それぞれの代入は別々のプロセスで発生し、メイン プロセスと共有されないため、効果はありません。

于 2012-06-26T22:46:26.447 に答える