0
私は並列で実行したいループをfor
持っているので、これを行うにはforeach
を使用しています。foreachループが毎回反復するたびに行列を更新するR
私のループからの出力の1つは、すべての反復の結果を含む行列です。 for
ループを使用すると、この行列は順次更新され、最後に出力されます。ただし、foreach
を使用している場合、これを更新しているようには見えません。
たとえば、私は私の要点を示す簡単な例をまとめました。
# foreach example - does not update DF matrix.
cl=makeCluster(4)
registerDoParallel(cl)
DF=matrix(NA,ncol=5,nrow=10)
foreach(i=1:10) %dopar% {
DF[i,1]=i*1
DF[i,2]=i*2
DF[i,3]=i*3
DF[i,4]=i*4
DF[i,5]=i*5
}
# for loop - Updates DF and produces complete output.
DF=matrix(NA,ncol=5,nrow=10)
for(i in 1:10) {
DF[i,1]=i*1
DF[i,2]=i*2
DF[i,3]=i*3
DF[i,4]=i*4
DF[i,5]=i*5
}
私は、このようなforeach(i=1:10,DF)
として(、私は私が使用しているすべてのパッケージを実行する必要がありますように、foreach
コマンドでDF
データフレームを指定する必要があるかもしれ気持ちを持っていますが、私が管理していませんこの作業を行う。
これは私に元のコードでは3つのデータフレームだけを出力する必要がありますが、マトリックスを作成するという考えができます。したがって、この作業を行うことは困難/不可能だと私は思う。 – sym246
その場合、並列で実行する場合は、 'lapply'または' mclappy'を使用してコードをベクトル化してみてください。 'for'ループでそれをやっても、そのような長いforループはRで非常に遅くなります。 – Koundy