2013-01-17 50 views
7

我的理解是,使用set.seed可確保可重複性,但對於R 2.15.2中的以下R代碼,情況並非如此。我在這裏錯過了什麼嗎?set.seed with 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 

回答

19

set.seed()重新初始化random number generator

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 
12

使用隨機數生成器將改變目前的種子,即使你手動設置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演示,你必須在每次使用隨機數發生器的前種子重置爲保證其使用的每一次相同。