首页 > 解决方案 > set.seed() 在不同的操作系统上使用 RNGkind()

问题描述

这个问题与以下问题相似(但不一样!)...

使用 set.seed 命令的不同样本结果?

set.seed 在不同版本的 R(和 Ubuntu)上是否一致?

R中相同的种子,不同的操作系统,不同的随机数

...在RNGkind()脚本中建议使用其中设置种子时确保 OS / R 版本之间的一致性set.seed()

但是,我发现为了在我正在使用的 unix 和 windows 系统上重现结果,我必须RNGkind(sample.kind = "Rounding") 在 Windows 上运行而不是在 unix 上运行时进行设置。如果我同时设置它,我将无法重现结果。

谁能解释系统中的这种差异?在不知道最终用户的操作系统的情况下,如何与 set.seed() 共享代码并确保其可重现?

非常感谢

编辑:我在使用该kmeans()功能时遇到了这个问题。我set.seed(1)在每次使用之前kmeans()

标签: r

解决方案


R 中的随机数生成器在操作系统之间是一致的,但在 R 的历史中已经修改了几次,因此默认情况下在 R 版本之间不一致。但是,您始终可以通过设置set.seed()RNGkind()匹配以前使用的内容来重现早期 R 版本的随机流。

RNGversion()函数会将较新版本的 R 设置为任何先前版本的默认值。如果查看它的源代码,您会发现默认值在 0.99、1.7.0 和 3.6.0 中发生了变化。

重现随机数结果的一个困难是人们并不总是报告RNGkind(). 如果您更改为非默认设置并保存工作区,您将在重新加载时返回到该非默认设置。

一般来说,每个更改都是一种改进,因此使用类似代码RNGkind(sample.kind = "Rounding")的建议可能是不好的建议:它恢复了在 R 3.6.0 中默认修复的错误行为。(尽管这是一个非常微妙的错误,除非您使用的sample()功能非常庞大。)

通常最好鼓励人们使用 R 的最新版本(偶尔 xy0 版本除外,它有时会引入新的错误)。保存工作区也是一个坏主意,因为这会导致 R 保留旧的或非默认的 RNG。


推荐阅读