set.seed()函数与sample()函数结合使用是否始终提供相同的样本,而与所使用的硬件无关?

时间:2019-05-26 14:46:20

标签: r sample

我结合使用sample()命令和set.seed()命令来获得始终相同的样本,并且一切正常。但是,在不同的笔记本电脑上应用相同的命令会返回不同的示例。有谁知道发生了什么事?

我还尝试了set.seed()rnorm()的组合,令人惊讶的是,我在两台笔记本电脑上都得到了完全相同的随机数。

set.seed(123)
sample(LETTERS,6)

set.seed(123)
rnorm(6,1,1)

我希望在两台笔记本电脑上都显示结果“ H”,“ T”,“ J”,“ U”,“ W”,“ A”。但是,一台笔记本电脑显示结果“ O”,“ S”,“ N”,“ C”,“ J”,“ R”。

set.seed(123)
rnorm(6,1,1)

产生

0.4395244 0.7698225 2.5587083 1.0705084 1.1292877 2.7150650

在两台笔记本电脑上。

1 个答案:

答案 0 :(得分:1)

这不是由于跨硬件可重复性问题引起的,而是R 3.6.0中引入的差异–您必须在一台计算机上安装R 3.6.0,另一台计算机上安装早期版本。从help("set.seed")起(从R 3.6.0起):

  

用法

     

...
  set.seed(seed,kind = NULL,normal.kind = NULL,sample.kind = NULL)
  ...

     

详细信息

     

sample.kind可以是“ Rounding”或“ Rejection”,或部分匹配   这些。前者是3.6.0之前的版本中的默认设置:   样本在大量人群中明显不均匀,应仅在   用于复制旧结果。有关讨论,请参见PR#17494。

观察以下内容,以发现机器之间的区别(即,这表明它不是跨硬件问题,因为我仅在一台机器上这样做):

set.seed(123, sample.kind = "Rejection") # Default in R 3.6.0
sample(LETTERS, 6)
# [1] "O" "S" "N" "C" "J" "R"

set.seed(123, sample.kind = "Rounding") # Default in R < 3.6.0
sample(LETTERS, 6)
# [Warning omitted]
# [1] "H" "T" "J" "U" "W" "A"