关于 2 的答案,请先查看帮助页面?RNGkind。
要查找正在使用的 RNG 类型:
RNGkind()
# [1] "Mersenne-Twister" "Inversion"
Mersenne Twister 是默认设置。
从帮助页面:
“Mersenne-Twister”:来自松本和西村(1998 年)。一种
扭曲的 GFSR 周期为 2^19937 - 1 且在
623 个连续维度(在整个期间)。这
‘seed’ 是一个 624 维的 32 位整数集合加上一个
该集合中的当前位置。
要找到当前正在使用的种子,需要先调用随机数生成器。
runif(1, 0, 1)
# [1] 0.9834062
.Random.seed
# [Gives a 626 length vector]
调用set.seed(some_integer),然后是.Random.seed,
如果您使用相同的some_integer,将始终给出相同的 626 长度向量。换句话说,长度为 626 的向量仅由 some_integer 确定,当然前提是使用 Mersenne Twister。
当然,当然,将set.seed 运行到某个固定值将为您调用跟随它的随机数例程提供相同的值。这是它在实践中的主要用途,以提供可重复性。例如
set.seed(1)
runif(5, 0, 1)
# [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
rnorm(1, 0, 1)
# [1] 1.272429
set.seed(1)
runif(5, 0, 1)
# [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
rnorm(1, 0, 1)
# [1] 1.272429
R中的所有基本数字生成器代码都在源代码的src/main/RNG.c文件中。
它是用 C 语言编写的,但相当容易理解。