2016-04-14 24 views
0

snow::clusterApply'u kullanarak bir işlevi paralel olarak uygulamak istiyorum. İşlevim, işlevin bir bölümünde geçici (önceden tanımlanmış) bir tohum kullanır, ancak genel olarak bağımsız rasgele sayıları korumalıdır. Geçici tohumlar her "iş" için farklıdır.R Kar rlecuyer: geçici tohumlu fonksiyonu uygulayın

ben aşağıdakileri yapabilirsiniz: Kar paket belgelerinde (http://homepage.stat.uiowa.edu/~luke/R/cluster/cluster.html) bölümünün "KAR Kümelerinde Üniforma Rasgele Sayı Üretimi" de verilen linke aşağıdaki Ancak

# setting up cluster of type="SOCK" 
library(snow) 
cl <- makeSOCKcluster(2) 

# this is my function 
myfu <- function(seed){ 
    # temporary seed: 
    x <- R.utils::withSeed(rnorm(10),seed) 
    # more calculation with independent RNG: 
    y <- x*rnorm(10) 
    return(list(stays=x,changes=y)) 
} 

# run example: 
seed <- 1:4 
data.frame(clusterApply(cl,seed,myfu)) 
# reproduce 
data.frame(clusterApply(cl,seed,myfu)) 

stopCluster(cl) 

, okudum "varsayılan olduğunu Rastgele sayı üreteçlerinin oldukça ilişkili olması muhtemeldir ve örneğin, örneğin Paket rlecuyer. Benim kodunda olduğunu eklemeyi denerseniz

Şimdi, set.seed veya withSeed hiçbir kullanılacak malzeme bir daha:

# setting up cluster of type="SOCK" 
library(snow) 
library(rlecuyer) 
cl <- makeSOCKcluster(2) 

# setup RNG Stream 
clusterSetupRNGstream(cl,seed=1:6) 

# run example: 
seed <- 1:4 
data.frame(clusterApply(cl,seed,myfu)) 
# can't reproduce 
data.frame(clusterApply(cl,seed,myfu)) 

stopCluster(cl) 

nasıl onları çağırmak gerektiğinde ben set.seed veya withSeed paralel geçici bir çözüm olabilir iş temeli ve clusterApply çağrı öncesinde değil mi?

cevap

0

Aptal beni./withSeed çağrıları (tabii ki) sorunumu çağırırken kind="L'Ecuyer-CMRG"'u kullanın.