【发布时间】:2018-06-18 22:52:49
【问题描述】:
我偶然发现了这种意外行为(对我来说),这可能是由于我对.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() 函数的输入。
【问题讨论】:
-
set.seed()仅用于获取单个数字。这并不意味着从.Random.seed中获取值。当你传入一个向量时,它只会取第一个数字。请注意,s1[1]==s3[1](403) 与两次调用set.seed(403)相同。你可以看到all(s1==s2)==FALSE但set.seed(s1); runif(1); set.seed(s2); runif(1)你得到了相同的数字。如果需要,您可以直接分配给.Random.seed<-,而不是使用set.seed()。 -
@MrFlick 这应该是一个答案,而不是一个评论
-
@MrFlick 谢谢,就是这样。我认为 set.seed() 会使用整个向量作为第一个参数,而不仅仅是它的第一个元素。我会期待某种警告。