Мне кажется, что если вы хотите гарантировать, что последующие вызовы mclapply в сеансе R получают разные случайные числа, вам нужно либо вызвать set.seed с другим значением, удалить глобальную переменную ".Random.seed »или сгенерировать по крайней мере одно случайное число в этом сеансе R перед повторным вызовом mclapply.
Причина такого поведения заключается в том, что mclapply (в отличие от mcparallel, например) вызывает mc.reset.stream внутренне. Это сбрасывает семя, которое спрятано в «параллельном» пакете, на значение «.Random.seed», поэтому, если «.Random.seed» не изменилось, когда mclapply снова вызвано, рабочие, запущенные mclapply, получат такие же случайные числа, как и ранее.
Обратите внимание, что это не относится к функциям, таким как clusterApply и parLapply, поскольку они используют постоянных работников и, следовательно, продолжают рисовать случайные числа из потока RNG. Но новые рабочие раздваиваются каждый раз, когда вызывается mclapply, по-видимому, намного сложнее иметь такой тип поведения.
Вот пример установки семян для различных значений для того, чтобы получить различные случайные числа, используя mclapply:
RNGkind("L'Ecuyer-CMRG")
set.seed(100)
mclapply(1:2, function(i) rnorm(2))
set.seed(101)
mclapply(1:2, function(i) rnorm(2))
Вот пример удаления «.Random.seed»:
RNGkind("L'Ecuyer-CMRG")
mclapply(1:2, function(i) rnorm(2))
rm(.Random.seed)
mclapply(1:2, function(i) rnorm(2))
И вот пример генерации случайных чисел на главном:
RNGkind("L'Ecuyer-CMRG")
mclapply(1:2, function(i) rnorm(2))
rnorm(1)
mclapply(1:2, function(i) rnorm(2))
Я не уверен, что это лучший подход, но это может зависеть от того, что вы пытаетесь сделать.
Хотя кажется, что просто вызов mclapply несколько раз без изменения «.Random.seed» приводит к воспроизводимым результатам, я не знаю, гарантировано ли это. Чтобы гарантировать воспроизводимые результаты, я думаю, вам нужно позвонить set.seed:
RNGkind("L'Ecuyer-CMRG")
set.seed(1234)
mclapply(1:2, function(i) rnorm(2))
set.seed(1234)
mclapply(1:2, function(i) rnorm(2))
Вы находитесь в Windows или UNIX? похоже, что этот параметр игнорируется в Windows. – agstudy
работает отлично для меня на Mac с пакетом 'multicore'. – Arun
Это работает для меня в Windows 7 и R-2.15-2. Я получаю разные значения каждый раз. – Andrie