簡體   English   中英

R.2.15.2的set.seed

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM