我偶然发现了这种意想不到的行为(对我而言),这可能是由于我对.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()
函数的输入。
答案 0 :(得分:1)
您不能将整数向量.Random.seed
与set.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)