其中R 2.15.2 set.seed(set.seed with R 2.15.2)

2019-08-07 05:14发布

我的理解是,使用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

Answer 1:

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


Answer 2:

使用随机数发生器的任何调用将改变目前的种子,即使你手动设置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演示,你必须在每次使用随机数发生器的前种子重置为保证其使用的每一次相同。



Answer 3:

值得强调的是这里的数字序列是因为该重新初始化的每次设置种子时仍然可重复性。

因此,尽管一起例如,每个后续调用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

这里的关键是, 如果你在一个脚本开始时设置的种子,一旦你将获得同样的每次运行整个脚本时产生的随机数 ,而来自内部的每一个随机数生成器调用得到一个不同的组数字码。 这是因为你是在从种子在开始同一序列运行。 这可能是一件好事,这意味着,如果你想要一个可重复脚本,你可以在开始一次设置种子。



文章来源: set.seed with R 2.15.2