簡體   English   中英

R:set.seed在除去種子后產生相同的結果

[英]R: set.seed produces the same result after seed removal

背景。 我想在R v.3.5.0for周期內生成隨機序列。 為此,我使用下面的代碼:

rm(.Random.seed, envir=globalenv())
some_list = list()
for (iter in 1:3) {
  set.seed(iter)
  some_list[[iter]] = sample(1:10)
}
some_list

這段代碼向我返回了這樣的列表:

> some_list
[[1]]
 [1]  3  4  5  7  2  8  9  6 10  1
[[2]]
 [1]  2  7  5 10  6  8  1  3  4  9
[[3]]
 [1]  2  8  4  3  9  6  1  5 10  7

之后,我重新運行相同的腳本,並期望在會話中運行rm(.Random.seed, envir=globalenv())后重置種子。因此,將獲得不同的結果。

但是實際情況有所不同-即使從.Random.seed globalenv()刪除了.Random.seed之后,我仍然收到完全相同的列表。 請查看附帶確切命令順序的屏幕:命令順序

我真的對set.seed的這種行為感到困惑。

我的問題是:

1)set.seed的這種行為是否正常?

2)如果rm(.Random.seed, envir=globalenv())如何重置種子?

提前致謝。

似乎您正在通過調用rm(.Random.seed, envir=globalenv())來針對隨機行為,所以為什么不從代碼中完全刪除set.seed

rm(.Random.seed, envir=globalenv())
some_list = list()
for (iter in 1:3) {
  some_list[[iter]] = sample(1:10)
}
some_list

每次運行時,上面的結果都會不同。 無需在我們的代碼中設置set.seed

我基於Sys.time()作為種子創建了解決方法。 這是一個代碼:

some_list = list()
for (iter in 1:3) {
  set.seed(as.numeric(Sys.time()))
  some_list[[iter]] = sample(1:10)
  Sys.sleep(1)
}
some_list

但是,盡管如此,我需要添加Sys.sleep(1)因為如果該周期中的操作持續少於1秒,則此解決方案將不起作用。 我相信這只是解決方法,主要問題仍然懸而未決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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