首页 > 解决方案 > 在 R 中使用 Foreach 循环时出现连接错误

问题描述

我正在使用 foreach 循环来尝试加快我正在做的一些数据处理。我会上传完整的代码,但它大约有 2k 行,所以这似乎不值得。基本上,我有一堆矩阵(15 宽和 300 到 1500 长)需要使用 mclust 通过 Mplus。我有一个围绕 foreach 循环的 for 循环,其中包含 mclust 模型拟合。像这样的东西:

registerDoParallel(4)

for (i in 1:10) {
 if (i==1) {data=load(file.rda)} #I've broken the data into 10 smaller chunks
 if (i==2) ...
 out <- foreach (sim=1:length(data), .packages=c('mclust','MplusAutomation')) %dopar% {
 #Proceed to fit various models in Mplus and saving the important output to a matrix as
 results[1:130] 
#this is so the thing that gets reported is the list of results I need and not a singular value. 
 }
 if (i==1) {save(out, "out.file.rda")}
 if (i==2) ... 
}

无论如何,我知道该代码适用于较小的数据批次(例如,如果我告诉它仅在每个数据集中的前十个上运行,它可以毫无问题地运行干净。但是,当我将其加速运行时完整的数据集,我得到这样的错误:

Error in { : task 175 failed - "cannot open the connection"

它似乎发生在脚本期间的不同时间点,并不总是在同一时间/地点。我试过搞乱它使用多少个内核(4-6),它在任何时候加载多少数据(一次全部 6.6 GB 到 1/10),我增加了工作内存(内存.limit(size=56000)),但这些更改都不允许代码无错误地运行。事实上,它还从来没有完成其中一个 i 循环。

有什么建议么?

标签: rforeachparallel-processingdoparallelmclust

解决方案


推荐阅读