R軟體如何儲存隨機種子?

R是一個很好的模擬工具,有許多內建函數可資運用。使用者有時希望獲得相同的模擬結果,則可將隨機種子(random seed)儲存起來重複利用。例如:

> set.seed(12)
> seed <- .Random.seed
> x <- runif(10)
> .Random.seed <- seed
> y <- runif(10) x-y

[1] 0 0 0 0 0 0 0 0 0 0

 

讀者會發現兩次模擬的十筆均勻分配資料是一樣的。

如果要在兩次 R sessions中獲得相同的模擬結果,首先請輸入:

> # seesion 1

> set.seed(10)

> seed <- .Random.seed

> x<-runif(10)

 

將第一個 session 的結果儲存起來後離開 R:

> write.table(x, "x")

>write.table(seed, "seed")

> q( )

 

重新開啓 R,在第二個session 輸入:

> # session 2

> x <- read.table("x")

> seed <- read.table("seed")

> .Random.seed <- t(seed)

> y <- runif(10)

> x - y

                    x

1       3.330669e-16

2       3.330669e-16

3       -2.220446e-16

4       -4.440892e-16

5       2.775558e-17

6       -1.110223e-16

7       2.220446e-16

8       -1.665335e-16

9       -3.330669e-16

10     1.110223e-16

讀者會發現兩次 sessions 模擬的結果幾乎沒有差異!

 

參考資料:http://lists.cs.wisc.edu/archive/stat-forum/2007-March/msg00004.shtm/

撰文者:
鄒慶士 博士
現任:
北商資訊與決策科學所教授
中華 R 軟體學會理事長
信箱:
vince.tsou@gmail.com