首页 > 解决方案 > set.seed() 与 R 中的 .Random.seed 的意外行为?

问题描述

我偶然发现了这种意想不到的行为(对我而言),这可能是由于我对.Random.seed.

set.seed(1234)  # This is for reproducibility
s1 <- .Random.seed
set.seed(s1)
s2 <- .Random.seed
runif(1)
s3 <- .Random.seed
set.seed(s3)
s4 <- .Random.seed
all(s2==s4)  # TRUE

我不明白的部分是最后一行。种子集如何“返回”到s2,即返回到之前runif(1)被调用的集合?

我知道这会.Random.seed保存统一随机数生成器的种子集,但我的理解是我也可以将它用作set.seed()函数的输入。

标签: rrandom

解决方案


您不能将整数向量.Random.seedset.seed. 仅使用第一个整数。确实,你保存的RNG状态和调用的时候是一样的set.seed(403),是的第一个元素.Random.seed

如果您确定您有一个有效的种子向量,那么您可以将它分配给.Random.seed. 但是,您可能最好使用rngtools::RNGseed(),因为它至少会进行一些基本的错误检查:

set.seed(1234)  # This is for reproducibility
s1 <- .Random.seed
runif(5)

.Random.seed <- s1
runif(5)

rngtools::RNGseed(s1)
runif(5)

推荐阅读