R 中关于 set.seed
的共识是它有效地生成一长串由种子预先确定的伪随机数。然后,您对该序列进行的第一次调用(使用您使用的第一个非确定性函数)从该序列中获取第一批,第二次调用获取下一批,依此类推。
我想知道这有什么限制。具体来说,当你到达那个长序列的末尾时会发生什么?比方说,设置种子后,您会重复从前 100 个整数中采样。是否会出现一个点,您开始生成与开始时看到的相同的样本(以相同的顺序)?这需要多长时间? (它取决于种子吗?)如果不是,如何到达序列的“结尾”并大概绕回开头 list ?
最佳答案
R 中的 ?RNGkind
帮助页面提供了有关默认随机数生成器“Mersenne Twister”算法的更多详细信息:
"Mersenne-Twister": From Matsumoto and Nishimura (1998); code updated in 2002. A twisted GFSR with period 2^19937 - 1 and equidistribution in 623 consecutive dimensions (over the whole period). The ‘seed’ is a 624-dimensional set of 32-bit integers plus a current position in that set.
如此处所述,“周期”(返回开始并开始重复值所需的时间长度为 2^19937-1,或大约 10^(19937/log2(10))
= 10^6001。
- 如果您的“批处理”大小恰好与周期完全一致,那么您确实会再次开始获得相同的批处理。
- 我不确定 R 使用多少伪随机样本从集合中选择大小为 1 的样本。理想情况下,它仅为 1(因此您的“批量大小”将为 1),但它可能更多地取决于采样算法的普遍性/复杂性。
- 我知道
runif()
或多或少直接从 PRNG 转换而来,因此一系列runif()
调用确实会完全重复。
关于r - R 中的种子限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61923723/