मेरे डिफ़ॉल्ट हुआ करता था जवाब (foreach का प्रयोग करके) "अच्छी तरह से तो ऐसा नहीं है" snow पैकेज करता है के रूप में (भरोसेमंद!) तुम्हारे लिए।
लेकिन जैसा कि @ स्पेसमैन बताते हैं, रेनाड का नया doRNG वह है जिसे आप doFoo
/foreach परिवार के साथ रहना चाहते हैं।
वास्तविक कुंजी हालांकि क्लस्टर है, सभी नोड्स पर बीज सेट करने के लिए ऐप्ली-स्टाइल कॉल। और एक फैशन में जो धाराओं में समन्वित है। ओह, और मैंने उल्लेख किया कि snow टियरनी, रॉसीनी, ली और सेविसिकोवा द्वारा लगभग एक दशक तक यह आपके लिए किया जा रहा है?
संपादित करें: और जब तुम यहाँ संपूर्णता के लिए के बारे में snow, नहीं पूछा कमांड लाइन से एक उदाहरण है:
[email protected]:~$ r -lsnow -e'cl <- makeSOCKcluster(c("localhost","localhost"));\
clusterSetupRNG(cl);\
print(do.call("rbind", clusterApply(cl, 1:4, \
function(x) { stats::rnorm(1) })))'
Loading required package: utils
Loading required package: utils
Loading required package: rlecuyer
[,1]
[1,] -1.1406340
[2,] 0.7049582
[3,] -0.4981589
[4,] 0.4821092
[email protected]:~$ r -lsnow -e'cl <- makeSOCKcluster(c("localhost","localhost"));\
clusterSetupRNG(cl);\
print(do.call("rbind", clusterApply(cl, 1:4, \
function(x) { stats::rnorm(1) })))'
Loading required package: utils
Loading required package: utils
Loading required package: rlecuyer
[,1]
[1,] -1.1406340
[2,] 0.7049582
[3,] -0.4981589
[4,] 0.4821092
[email protected]:~$
संपादित करें: और संपूर्णता के लिए, यहाँ संयुक्त अपने उदाहरण है क्या और अधिक जटिल छोरों के लिए के लिए doRNG
> library(foreach)
R> library(doMC)
Loading required package: multicore
Attaching package: ‘multicore’
The following object(s) are masked from ‘package:parallel’:
mclapply, mcparallel, pvec
R> registerDoMC(2)
R> library(doRNG)
R> set.seed(123)
R> a <- foreach(i=1:2,.combine=cbind) %dopar% {rnorm(5)}
R> set.seed(123)
R> b <- foreach(i=1:2,.combine=cbind) %dopar% {rnorm(5)}
R> identical(a,b)
[1] FALSE ## ie standard approach not reproducible
R>
R> seed <- doRNGseed()
R> a <- foreach(i=1:2,combine=cbind) %dorng% { rnorm(5) }
R> b <- foreach(i=1:2,combine=cbind) %dorng% { rnorm(5) }
R> doRNGseed(seed)
R> a1 <- foreach(i=1:2,combine=cbind) %dorng% { rnorm(5) }
R> b1 <- foreach(i=1:2,combine=cbind) %dorng% { rnorm(5) }
R> identical(a,a1) && identical(b,b1)
[1] TRUE ## all is well now with doRNGseed()
R>
बर्फ के साथ उदाहरण के लिए धन्यवाद। मैं आर में समांतर प्रोग्रामिंग की जटिलताओं में अच्छी तरह से परिचित नहीं हूं, इसलिए मैंने गैर-समानांतर कोड से समानांतर तक अपने दर्द रहित संक्रमण के लिए 'foreach' का उपयोग शुरू किया। मुझे पता था कि मुझे कुछ याद आ रहा था। – mpiktas
ठीक है, यही कारण है कि हम सभी साल पहले बर्फ से शुरू हुए क्योंकि मानक * लागू() कार्यों से समानांतर में संक्रमण आसान था :) –