[英]set.seed with R 2.15.2
我的理解是,使用set.seed
可确保可重复性,但对于R 2.15.2
的以下R代码,情况并非如此。 我在这里想念什么吗?
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
任何系列调用。
此处的要点是, 如果您在脚本开始时设置一次种子,则每次运行整个脚本时都会获得相同的随机数集 ,而在码。 这是因为从一开始,您就从该种子开始以相同的顺序运行。 这可能是一件好事,这意味着如果您想要可复制的脚本,则可以在开始时设置一次种子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.