r - set.seed() 函数与 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
在两台笔记本电脑上。
解决方案
这不是由于跨硬件再现性问题,而是在 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 可以是“舍入”或“拒绝”,或与这些匹配。前者是 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"
推荐阅读
- facebook - 从私人组中获取数据
- google-cloud-platform - 如何在请求中向 Google Cloud Functions 发送服务帐户令牌
- c# - 如何使用 Revit 2018 打开和激活 BIM 360 文档?
- c - 为什么 PLL 不锁定?我的时钟配置是否正确?
- android - React Native OkHttpUtils.java 使用或覆盖了已弃用的 API。在 react-native-ssl-pinning
- node.js - Redis 在生产环境中使用 Node.js
- javascript - ODOO:如何通过调用没有 action_type 按钮的 Javascript 事件来触发 do_action
- javascript - 如何向我的 v-data-table 组件的 Application 列添加超链接?
- c++ - 如何找到多维 std::array 的大小?
- javascript - 仅在数组长度更改时如何使用效果?