随机种子 "spent" 以某种方式存在吗?
Are random seeds "spent" in some way?
我希望这段代码每次都能给我相同的数字:
set.seed(1)
sample(rep(1:100), size = 1)
然而,事实并非如此。这是它的行为方式:如果我 运行 这两行紧接在一起,它会给我相同的数字,但是,如果我然后再次 运行 第二行,它会给我一些不同的东西。这是否意味着种子是 "spent" 在 运行 宁 sample()
一次之后?
我需要生成包含随机抽样但可重现的代码。我怎样才能确保每次都产生相同的随机数?
这并不是真正的工作原理,但有助于理解。
想象一下,我们通过在预先生成的随机数簿中查找来绘制 0 到 9 之间的数字。一本很长的书,里面有很多很多随机抽奖,是由一些无聊的本科生实习生用一个公平的 10 面骰子随机抽取的。 R 通常所做的是查看书中先前随机数之后的数字。所以如果这本书开始 4, 5, 2, 8, 3, 4, 4, 1, 7, 0, 4, ...
第一个随机数将是 4,然后是 5 等等
结果将与书中一样随机 --- 无论我们从书中的何处开始。通常,您不知道将要得到什么,因为您不知道 R 当前在书中的什么位置,可能是第 103 页,也可能是第 10003 页。设置种子告诉 R 从特定位置开始。所以 set.seed(1)
表示 "start on page 1",所以您现在可以指望第一个是“4”,然后是 5,依此类推。
不是种子花掉了;相反,设置种子会产生一个固定的伪随机值序列,您将从中进行采样。一旦您从序列中采样了一个值,您采样的下一个值将是序列中的后续值。但是,如果您重置种子,那么您将在再次采样时从序列的开头重新开始。
我希望这段代码每次都能给我相同的数字:
set.seed(1)
sample(rep(1:100), size = 1)
然而,事实并非如此。这是它的行为方式:如果我 运行 这两行紧接在一起,它会给我相同的数字,但是,如果我然后再次 运行 第二行,它会给我一些不同的东西。这是否意味着种子是 "spent" 在 运行 宁 sample()
一次之后?
我需要生成包含随机抽样但可重现的代码。我怎样才能确保每次都产生相同的随机数?
这并不是真正的工作原理,但有助于理解。
想象一下,我们通过在预先生成的随机数簿中查找来绘制 0 到 9 之间的数字。一本很长的书,里面有很多很多随机抽奖,是由一些无聊的本科生实习生用一个公平的 10 面骰子随机抽取的。 R 通常所做的是查看书中先前随机数之后的数字。所以如果这本书开始 4, 5, 2, 8, 3, 4, 4, 1, 7, 0, 4, ...
第一个随机数将是 4,然后是 5 等等
结果将与书中一样随机 --- 无论我们从书中的何处开始。通常,您不知道将要得到什么,因为您不知道 R 当前在书中的什么位置,可能是第 103 页,也可能是第 10003 页。设置种子告诉 R 从特定位置开始。所以 set.seed(1)
表示 "start on page 1",所以您现在可以指望第一个是“4”,然后是 5,依此类推。
不是种子花掉了;相反,设置种子会产生一个固定的伪随机值序列,您将从中进行采样。一旦您从序列中采样了一个值,您采样的下一个值将是序列中的后续值。但是,如果您重置种子,那么您将在再次采样时从序列的开头重新开始。