为什么 set.seed() 会影响 R 中的 sample()

Why set.seed() affects sample() in R

我一直认为 set.seed() 只会让随机变量生成器(例如,rnorm)为任何特定的一组输入值生成一个唯一的序列。

但是,我想知道,为什么当我们设置 set.seed() 时,函数 sample() 不能正确地完成它的工作?

问题

具体来说,给定下面的例子, 有没有办法在 rnorm 之前使用 set.seedsample 仍然会产生来自这个 rnorm 的新随机样本如果 sample 是 运行 多次?

这是一个R代码:

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

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

plot(sampled)

根据 ?set.seed

处的帮助文件

"If called with seed = NULL it re-initializes (see ‘Note’) as if no seed had yet been set."

因此,由于 rnormsample 都受到 set.seed() 的影响,您可以这样做:

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

我认为保存当前状态并恢复它比使用 NULL 重置种子更有意义。

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