[英]R: set.seed produces the same result after seed removal
背景。 我想在R v.3.5.0
的for周期內生成隨機序列。 為此,我使用下面的代碼:
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.