我正在使用 R 中的 doParallel/Foreach 后端并行运行一个进程。我将一组 20 个内核注册为一个集群,并运行该进程大约 100 次。我将一个矩阵传递给并行过程的每次迭代,并在子过程中将矩阵替换为它自己行的随机样本。我想知道的是:我是否应该期望这种修改在同一个子进程处理的后续迭代中持续存在?例如,当子进程 1 完成第一次迭代时,它是使用原始矩阵还是随机样本开始第二次迭代?
一个最小的例子:
library(doParallel)
X <- matrix(1:400, ncol=4)
cl<-makeCluster(2)
clusterExport(X)
registerDoParallel(cl)
results<-foreach(i=1:100) %dopar% {
set.seed(12345)
X <- X[sample.int(nrow(X),replace=TRUE),]
X
}
编辑:
需要明确的是,如果该对象确实会在同一个工作进程的迭代中持续存在,这不是我想要的行为。相反,我希望每次迭代都采用原始矩阵的新随机样本,而不是最近随机样本的随机样本(我认识到,在我的最小示例中,它每次都会创建原始矩阵的相同随机样本,由于种子集——在我的实际应用程序中,我处理了这个)。