R 세션에서 mclapply를 연속해서 호출 할 때 다른 난수를 얻게하려면 set.seed를 다른 값으로 호출하거나 전역 변수 ".Random.seed"를 제거해야합니다. ", 또는 mclapply를 다시 호출하기 전에 해당 R 세션에서 적어도 하나의 난수를 생성하십시오.
이 동작의 이유는 mclapply (예 : mcparallel과 달리)가 mc.reset.stream을 내부적으로 호출하기 때문입니다. 이렇게하면 "병렬"패키지에 숨겨진 시드가 ".Random.seed"값으로 재설정되므로 mclapply가 다시 호출 될 때 ".Random.seed"가 변경되지 않으면 mclapply에 의해 시작된 작업자가 이전에했던 것과 같은 난수.
clusterApply 및 parLapply와 같은 함수는 영구적 인 작업자를 사용하므로 RNG 스트림에서 임의의 숫자를 계속 그리기 때문에이 경우에는 해당되지 않습니다. 그러나 mclapply가 호출 될 때마다 새 작업자가 분기되며 아마도 이러한 유형의 동작을 갖는 것이 훨씬 더 어려워 질 것입니다.
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")
set.seed(100)
mclapply(1:2, function(i) rnorm(2))
set.seed(101)
mclapply(1:2, function(i) rnorm(2))
는 ".Random.seed"제거의 예 : 여기
는 mclapply 사용하여 서로 다른 난수를 얻기 위해 다른 값으로 종자를 설정하는 예이다 다음은 마스터에서 임의의 숫자를 생성하는 예입니다.
RNGkind("L'Ecuyer-CMRG")
mclapply(1:2, function(i) rnorm(2))
rnorm(1)
mclapply(1:2, function(i) rnorm(2))
어떤 방법이 최선의 방법인지는 모르겠지만, 당신이하려는 일에 달려 있습니다.
단순히 ".Random.seed"를 변경하지 않고 mclapply를 여러 번 호출하면 재현 가능한 결과가 발생하지만, 이것이 보장되는지는 알 수 없습니다. 재현 가능한 결과를 보장하기 위해 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
은'multicore' 패키지로 맥에서 잘 작동합니다. – Arun
이것은 Windows 7 및 R-2.15-2에서 저에게 적합합니다. 나는 매번 다른 값을 얻는다. – Andrie