【问题标题】:R snow rlecuyer: apply function with temporary seedR snow rlecuyer:使用临时种子应用功能
【发布时间】:2016-04-14 13:44:08
【问题描述】:

我想使用snow::clusterApply 并行应用一个函数。我的函数在函数的一部分中使用临时(预定义)种子,但通常应保持独立的随机数。每个“工作”的临时种子不同。

我可以做到以下几点:

# 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)

但是,按照雪包文档 (http://homepage.stat.uiowa.edu/~luke/R/cluster/cluster.html) 中“SNOW 集群中的统一随机数生成”部分中给出的链接,我读到“默认随机数生成器可能非常相关”和一个应该使用额外的包,例如包裹rlecuyer。

现在,如果我尝试将其包含在我的代码中,set.seed 或 withSeed 将不再有用:

# 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)

当我需要在工作基础上而不是在clusterApply 通话之前打电话给set.seed 或withSeed 时,我该如何同时解决它们?

【问题讨论】:

    标签: r random snow


    【解决方案1】:

    我太傻了。在调用set.seed/withSeed 时使用kind="L'Ecuyer-CMRG"(当然)解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2013-07-04
      • 2014-04-29
      • 2017-08-21
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多