Разбиение длинного воспроизводимого цикла foreach на несколько меньших циклов

#r #foreach #parallel-foreach #reproducible-research

#r #foreach #параллельный-foreach #воспроизводимый-исследование

Вопрос:

В R есть ли способ разбить один длинный параллельный цикл for на несколько более коротких циклов и при этом сохранить их воспроизводимыми и идентичными?

Я пытался сделать это с doRNG foreach помощью пакетов and , но когда я использую несколько коротких циклов сразу после друг друга, начальные значения RNG не такие, как при использовании одного длинного цикла, и поэтому результаты отличаются.

====

Пример кода

 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
  

Комментарии:

1. Я предполагаю, что «другие вычисления» занимают больше времени, чем выборка. Так что, может быть, решением может быть последовательная генерация выборок, а затем параллельное выполнение других вычислений?