为什么在R中使用set.seed()会影响sample()函数的结果

7

我一直认为set.seed()只是使随机变量生成器(例如rnorm)为特定的输入值生成唯一的序列。

然而,我想知道,为什么当我们设置了set.seed()后,函数sample()不能正确地执行其工作呢?

问题

具体来说,给出以下示例,是否有办法在rnorm之前使用set.seed(),但如果多次运行sample,则sample仍会从此rnorm产生新的随机样本?

这是R代码:

set.seed(123458)
x.y = rnorm(1e2)

sampled = sample(x = x.y, size = 20, replace = TRUE)

plot(sampled)

2
你认为 sample() 会做什么? - Marius
5
"set.seed"对所有随机数抽取产生影响。"sample"使用随机数抽取。 - Gregor Thomas
2个回答

10

根据 ?set.seed 帮助文件:

"如果 seed = NULL,则重新初始化(参见“注意”),就好像没有设置种子一样。"

因此,由于 set.seed() 影响了 rnormsample,你可以这样做:

set.seed(639245)
rn <- rnorm(1e2)
set.seed(NULL)
sample(rn,5)

2

我认为,与其使用NULL重置种子,更有意义的做法是保存当前状态并恢复它。

x <- .Random.seed
set.seed(639245)
rn <- rnorm(1e2)
.Random.seed <- x
sample(rn,5)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接