Rでは、単一の長い並列forループをいくつかの短いループに分割し、それらを再現可能で同一に保つ方法はありますか?
doRNG
およびパッケージでこれを実行しようとしましたforeach
が、いくつかの短いループを続けて使用すると、RNG シードは 1 つの長いループを使用した場合と同じではないため、結果が異なります。
====
サンプルコード
library(doRNG)
library(foreach)
library(doParallel)
# one loop
set.seed(123)
x1 <- foreach(i = 1:4) %dorng% sample(100, 5)
# several loops
set.seed(123)
x2 <- foreach(i = 1:2) %dorng% sample(100, 5)
# ... possibly doing other computations and then resetting seed ...
x3 <- foreach(i = 1:2) %dorng% sample(100, 5)
all.equal(c(x1), c(x2, x3)) # component 3 and 4 differ