【发布时间】:2016-04-24 17:10:40
【问题描述】:
我正在运行一个相当长的作业,我需要复制 100 次,因此我转向了 R 中的 foreach 功能,然后我通过 shell 脚本在 8 核集群上运行它。我正在尝试将每次运行的所有结果输入到同一个文件中。我已经包含了我的代码的简化版本。
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 循环结束时还是要等到最后?任何帮助将不胜感激。
【问题讨论】:
-
如果您将鼠标悬停在标签上,您可以看到它应该如何使用。 parallel.foreach 是一个 .NET 的东西。
-
@Laurel 你可以自己把它改成正确的parallel-foreach。
-
@svick 我只是想帮助作者学习如何使用标签。 (我也不知道正确的标签。我不知道 R,所以我不确定它是否重要到足以保证标签存在。)无论如何,我感谢你添加标签。
-
谢谢你们。我通常不发帖,所以我对一切如何运作都很陌生。我一定会在未来正确标记。
标签: r shell parallel-processing parallel-foreach