相同版本R跨操作系统set.seed后sample函数结果不一致问题
R同随机种子下sample()跨系统结果不一致问题解答
这种现象是R不同系统默认抽样配置差异导致的正常情况,不属于BUG,具体原因和解决方案如下:
核心原因
R的随机数生成体系中,不同类型的随机数生成逻辑是分离的:
- 正态分布随机数生成(
rnorm()这类函数)由normal.kind参数控制默认算法,所有系统的R默认配置一致,所以相同种子下返回结果相同 - 离散抽样函数
sample()的底层算法由单独的sample.kind参数控制,部分Windows系统的R 4.x版本会默认使用旧版Rejection抽样算法,而Mac/Linux版本默认使用R 3.6.0之后推出的Rounding算法,两种算法逻辑不同,自然相同种子下返回结果不同
解决方案
只要在设置随机种子之前,显式指定统一的sample.kind配置,就能实现跨系统的抽样结果完全可复现,示例代码如下:
# 显式统一随机数生成全配置,消除跨系统差异 # 若要对齐题中Windows的抽样结果,使用如下配置 RNGkind(sample.kind = "Rejection") set.seed(1) sample(100,3) # 返回结果统一为27 37 57 # 若要对齐题中Mac的抽样结果,使用如下配置 RNGkind(sample.kind = "Rounding") set.seed(1) sample(100,3) # 返回结果统一为68 39 1
调用RNGkind()指定配置后,所有后续的随机相关操作都会严格遵循指定的算法逻辑,不存在跨系统差异。
内容的提问来源于stack exchange,提问作者JasonYeung
相关产品推荐
相关产品推荐

