假设我想在100个不同的模拟数据集中进行1000次自举程序。
在顶层,我可以设置foreach
后端,将100个作业分配给不同的CPU。然后在较低级别,通过使用R包boot
中的函数boot
,我还可以通过指定并行'来调用并行计算。功能中的选项。
伪代码可能如下所示。
library(doParallel}
registerDoParallel(cores=4)
foreach(i=seq(100, 5, length.out = 100), .combine=cbind) %dopar% {
sim.dat <- simualateData(i)
boot.res <- boot(sim.dat, mean, R=1000, parallel = 'multicore', ...)
## then extract results and combine
...
}
我很想知道并行计算在这种情况下是如何工作的。
boot
等并行计算选项。在那种情况下,是否需要指定提供顶级的较低级并行?或相反亦然? 感谢您的任何澄清。
编辑:
我应该更清楚地解释这个问题。实际上,在返回boot.res
之后,将对其进行更多其他计算,以便最终从boot.res
获取摘要统计信息。这意味着整个计算不是相互独立的自举程序。在这种情况下,只有外部并行循环会弄乱结果。因此,如果我在这里理解正确,最好的方法是使用嵌套的foreach
并行后端,但是抑制&#39; parallel&#39;来自boot
的选项。
如果我错了,请任何人纠正我。问候。
结束编辑