set.seed()与R中的.Random.seed一起出现意外行为?

时间:2018-06-18 14:18:23

标签: r random

我偶然发现了这种意想不到的行为(对我而言),这可能是由于我对.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()函数的输入。

1 个答案:

答案 0 :(得分:1)

您不能将整数向量.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)