【发布时间】:2022-11-28 13:38:20
【问题描述】:
我有一些要并行运行的测试。当我使用 foreach() 执行此操作时,我得到了 20 个测试迭代对的预期输出:
## Without seed
require(data.table)
require(foreach)
require(iterators)
require(doParallel)
require(doRNG)
numCores = 2
registerDoParallel(numCores)
iterations = 5
num_tests = 2:5
foreach( i = 1:iterations, .combine = 'rbind', .multicombine = TRUE, .inorder = FALSE ) %:%
foreach( n = num_tests, .combine = 'rbind', .multicombine = TRUE, .inorder = FALSE ) %dopar% {
## Print iteration
print(paste('Tests =',n,'Iteration =',i))
}
输出:
result.1 "Tests = 2 Iteration = 1"
result.2 "Tests = 3 Iteration = 1"
result.3 "Tests = 4 Iteration = 1"
result.4 "Tests = 5 Iteration = 1"
result.1 "Tests = 2 Iteration = 2"
result.2 "Tests = 3 Iteration = 2"
result.3 "Tests = 4 Iteration = 2"
result.4 "Tests = 5 Iteration = 2"
result.1 "Tests = 2 Iteration = 3"
result.2 "Tests = 3 Iteration = 3"
result.3 "Tests = 4 Iteration = 3"
result.4 "Tests = 5 Iteration = 3"
result.1 "Tests = 2 Iteration = 4"
result.2 "Tests = 3 Iteration = 4"
result.3 "Tests = 4 Iteration = 4"
result.4 "Tests = 5 Iteration = 4"
result.1 "Tests = 2 Iteration = 5"
result.2 "Tests = 3 Iteration = 5"
result.3 "Tests = 4 Iteration = 5"
result.4 "Tests = 5 Iteration = 5"
但是,当我尝试向此循环添加一个步骤以设置随机种子时,如 doRNG 小插图中所述,我在每次迭代中得到不同数量的测试(14 个测试迭代对):
## With seed
numCores = 2
registerDoParallel(numCores)
iterations = 5
num_tests = 2:5
rng <- RNGseq( iterations * (iterations+1) / 2, 1234)
foreach( i = 1:iterations, .combine = 'rbind', .multicombine = TRUE, .inorder = FALSE ) %:%
foreach( n = num_tests, r = rng[(i-1)*i/2 + 1:i], .combine = 'rbind', .multicombine = TRUE, .inorder = FALSE ) %dopar% {
##Set seed
rngtools::setRNG(r)
## Print iteration
print(paste('Tests =',n,'Iteration =',i))
}
输出:
result.1 "Tests = 2 Iteration = 1"
result.1 "Tests = 2 Iteration = 2"
result.2 "Tests = 3 Iteration = 2"
result.1 "Tests = 2 Iteration = 3"
result.2 "Tests = 3 Iteration = 3"
result.3 "Tests = 4 Iteration = 3"
result.1 "Tests = 2 Iteration = 4"
result.2 "Tests = 3 Iteration = 4"
result.3 "Tests = 4 Iteration = 4"
result.4 "Tests = 5 Iteration = 4"
result.1 "Tests = 2 Iteration = 5"
result.2 "Tests = 3 Iteration = 5"
result.3 "Tests = 4 Iteration = 5"
result.4 "Tests = 5 Iteration = 5"
我正在寻找一种方法来并行设置种子,嵌套的 foreach() 循环具有正确的迭代次数。有任何想法吗?
【问题讨论】:
标签: r foreach data.table doparallel