【问题标题】:Using .Random.seed in R functions在 R 函数中使用 .Random.seed
【发布时间】:2022-01-02 20:20:29
【问题描述】:

我试图在 R 中获取种子并在函数中使用它,但它不起作用。 我发现可以使用.Random.seed 获取种子,并且当我不将其包含在函数中时它可以完美运行。这是一个例子。

seed         <- .Random.seed  #save the local seed
.Random.seed <- seed          #use the saved seed
sum(rnorm(100))
.Random.seed <- seed          #use the saved seed
sum(rnorm(100))

如我们所见,我将当前种子(本地种子)保存在对象seed 中。然后我可以稍后通过将其提供给.Random.seed 来使用该种子。因此,sum(rnorm(100)) 将返回相同的值。我尝试使用函数做同样的事情,但它不起作用。

f  <- function(seed){
  .Random.seed <- seed
  cat(sum(seed), sum(.Random.seed), "\n") 
  sum(rnorm(100))
}
f(seed)
f(seed)  #the value changed

我使用cat 打印 .Random.seed 以确保它不会改变,也不会改变。尽管如此,rnorm(100) 发生了变化。这怎么可能?

【问题讨论】:

    标签: random random-seed seed


    【解决方案1】:

    我找到了解决办法。在函数中,我只在函数的环境中更改了.Random.seed,而不是在全局环境中更改。如果我在全局环境中更改.Random.seed,它会起作用。

    f  <- function(seed){
      assign(".Random.seed", seed, envir = .GlobalEnv)
      cat(sum(seed), sum(.Random.seed), "\n")
      sum(rnorm(100))
    }
    f(seed)
    f(seed)
    

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 2015-05-14
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多