私は100回複製する必要がある非常に長いジョブを実行していますので、Rのforeach機能に目を向けると、シェルスクリプト。私は、それぞれの実行からすべての結果を同じファイルに入力しようとしています。私は自分のコードを簡略化したバージョンを含めました。Rの並列ジョブからの出力を1つのファイルに保存する
cl<-makeCluster(core-1)
registerDoParallel(cl,cores=core)
SigEpsilonSq<-list()
SigLSq<-list()
RatioMat<-list()
foreach(p=1:100) %dopar%{
functions defining my variables{...}
for(i in 1:fMaxInd){
rhoSqjMatr[,i]<-1/(1+Bb[i])*(CbAdj+AbAdj*XjBarAdj+BbAdj[i]*XjSqBarAdj)/(dataZ*dataZ)
sigmaEpsSqV[i]<-mean(rhoSqjMatr[,i])
rhoSqjMatr[,i]<-rhoSqjMatr[,i]/sigmaEpsSqV[i]
biasCorrV[,i]<-sigmaEpsSqV[i]/L*gammaQl(rhoSqjMatr[,i])
Qcbar[,i]<-Qflbar-biasCorrV[,i]
sigmaExtSq[,i]<-sigmaSqExt(sigmaEpsSqV[i], rhoSqjMatr[,i])
ratioMatr[,i]<-sigmaExtSq[,i]/(sigmaL*sigmaL)#ratio (sigma_l^e)^2/(sigmaL)^2
}
sigmaEpsSqV<-as.matrix(sigmaEpsSqV)
SigEpsilonSq[[p]]<-sigmaEpsSqV
SigLSq[[p]]<-sigmaExtSq
RatioMat[[p]]<-ratioMatr
} #End of the dopar loop
stopCluster(cl)
write.csv(SigEpsilonSq,file="Sigma_Epsilon_Sq.csv")
write.csv(SigLSq,file="Sigma_L_Sq.csv")
write.csv(RatioMat,file="Ratio_Matrix.csv")
ジョブが完了すると、私の.csvファイルは空です。私はforeachが結果をどのように保存し、どのように私がそれらにアクセスできるかをかなり理解していないと信じています。私は手動でファイルをマージする必要はありません。また、私はforeachループの最後に stopCluster(cl) と書かなければならないのですか、それとも最後まで待つのですか?どんな助けでも大歓迎です。
タグの上にカーソルを置くと、そのタグの使用方法がわかります。 ** parallel.foreach **は** NET **のものです。 – Laurel
@Laurelあなたはそれを正しい[タグ:平行foreach]に変更できました。 – svick
@svick著者がタグの使い方を学ぶのを助けたかっただけです。 (私は正しいタグについても知らなかった。私はRを知らないので、タグが存在することを保証するのに十分な重要性があるかどうかはわからなかった。)とにかくタグを付けていただきありがとう。 – Laurel