我的理解是,使用set.seed
确保重复性但这不是与下述R代码的情况下, R 2.15.2
。 我失去了一些东西在这里?
set.seed(12345)
rnorm(5)
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875
rnorm(5)
[1] -1.8179560 0.6300986 -0.2761841 -0.2841597 -0.9193220
我的理解是,使用set.seed
确保重复性但这不是与下述R代码的情况下, R 2.15.2
。 我失去了一些东西在这里?
set.seed(12345)
rnorm(5)
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875
rnorm(5)
[1] -1.8179560 0.6300986 -0.2761841 -0.2841597 -0.9193220
set.seed()
重新初始化随机数发生器 。
set.seed(12345)
rnorm(5)
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875
set.seed(12345)
rnorm(5)
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875
set.seed(12345)
rnorm(5)
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875
使用随机数发生器的任何调用将改变目前的种子,即使你手动设置set.seed
。
set.seed(1)
x <- .Random.seed # get the current seed
runif(10) # uses random number generator, so changes current seed
y <- .Random.seed
identical(x, y) # FALSE
作为@StephanKolassa演示,你必须在每次使用随机数发生器的前种子重置为保证其使用的每一次相同。
值得强调的是这里的数字序列是因为该重新初始化的每次设置种子时仍然可重复性。
因此,尽管一起例如,每个后续调用rnorm
你得到不同的答案给每个呼叫, 你还是会从种子设定点得到相同的数字序列 。
例如,每原题:
set.seed(12345)
rnorm(5)
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875
rnorm(5)
[1] -1.8179560 0.6300986 -0.2761841 -0.2841597 -0.9193220
产生10个号码为同一序列:
set.seed(12345)
rnorm(10)
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875
-1.8179560 0.6300986 -0.2761841 -0.2841597 -0.9193220
要么
set.seed(12345)
rnorm(7)
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875
-1.8179560 0.6300986
rnorm(3)
[1] -0.2761841 -0.2841597 -0.9193220
或任何一系列调用的rnorm
。
这里的关键是, 如果你在一个脚本开始时设置的种子,一旦你将获得同样的每次运行整个脚本时产生的随机数 ,而来自内部的每一个随机数生成器调用得到一个不同的组数字码。 这是因为你是在从种子在开始同一序列运行。 这可能是一件好事,这意味着,如果你想要一个可重复脚本,你可以在开始一次设置种子。