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中獲得相同的模擬結果,首先請輸入:


> # session 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 軟體學會理事長
信箱:
[email protected]

 

相关文章