【问题标题】:set.seed with R 2.15.2使用 R 2.15.2 设置种子
【发布时间】:2013-01-01 01:14:57
【问题描述】:

我的理解是使用set.seed 可以确保重现性,但R 2.15.2 中的以下R 代码并非如此。我在这里遗漏了什么吗?

set.seed(12345)
rnorm(5)
[1]  0.5855288  0.7094660 -0.1093033 -0.4534972  0.6058875
 rnorm(5)
[1] -1.8179560  0.6300986 -0.2761841 -0.2841597 -0.9193220

【问题讨论】:

    标签: r random statistics


    【解决方案1】:

    set.seed() 重新初始化 random number generator

    set.seed(12345)
    rnorm(5)
    [1]  0.5855288  0.7094660 -0.1093033 -0.4534972  0.6058875
    
    set.seed(12345)
    rnorm(5)
    [1]  0.5855288  0.7094660 -0.1093033 -0.4534972  0.6058875
    
    set.seed(12345)
    rnorm(5)
    [1]  0.5855288  0.7094660 -0.1093033 -0.4534972  0.6058875
    

    【讨论】:

      【解决方案2】:

      任何使用随机数生成器的调用都会更改当前种子,即使您已使用 set.seed 手动设置它。

      set.seed(1)
      x <- .Random.seed # get the current seed
      runif(10) # uses random number generator, so changes current seed
      y <- .Random.seed
      identical(x, y) # FALSE
      

      正如@StephanKolassa 演示的那样,您必须在每次使用随机数生成器之前重置种子,以确保每次使用相同的种子。

      【讨论】:

        【解决方案3】:

        值得强调的是,由于这种重新初始化,每次设置种子时,数字的序列仍然是可重现的。

        因此,尽管随后每次调用例如rnorm 每次调用都会得到不同的答案,从设置种子的那一刻起,你仍然会得到相同的数字序列

        例如,根据原始问题:

        set.seed(12345)
        rnorm(5)
        [1]  0.5855288  0.7094660 -0.1093033 -0.4534972  0.6058875
        rnorm(5)
        [1] -1.8179560  0.6300986 -0.2761841 -0.2841597 -0.9193220
        

        产生与以下相同的 10 个数字序列:

        set.seed(12345)
        rnorm(10)
        [1]  0.5855288  0.7094660 -0.1093033 -0.4534972  0.6058875
        -1.8179560  0.6300986 -0.2761841 -0.2841597 -0.9193220
        

        或者

        set.seed(12345)
        rnorm(7)
        [1]  0.5855288  0.7094660 -0.1093033 -0.4534972  0.6058875
        -1.8179560  0.6300986
        rnorm(3)
        [1] -0.2761841 -0.2841597 -0.9193220
        

        或者对rnorm的任何一系列调用。

        这里的重点是,如果您在脚本开始时设置一次种子,那么每次运行整个脚本时都会生成相同的随机数集,但会得到不同的随机数集代码中每个随机数生成器调用的数字。这是因为您从一开始就在该种子的相同序列上运行。这可能是一件好事,这意味着如果您想要一个可重现的脚本,您可以在开始时设置一次种子。

        【讨论】:

          猜你喜欢
          • 2020-04-07
          • 2015-06-17
          • 1970-01-01
          • 2012-10-19
          • 2021-08-11
          • 1970-01-01
          • 2021-03-31
          • 2014-06-23
          • 2012-11-28
          相关资源
          最近更新 更多