R:set.seed 去除种子后产生相同的结果

R: set.seed produces the same result after seed removal

Background. 我想在 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

此代码 returns 我是这样的列表:

> 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())之后重置种子,因此得到不同的结果。

但实际情况不同 - 即使在从 globalenv() 中删除 .Random.seed 之后,我仍收到完全相同的列表。 请查看附带确切命令顺序的屏幕: Sequence of commands

我对set.seed的这种行为感到很困惑。

我的问题是:

1) set.seed这样的行为正常吗?

2) 如果 rm(.Random.seed, envir=globalenv()) 不起作用,如何重置种子?

提前致谢。

我创建了基于使用 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 秒,此解决方案将不起作用。 我相信这只是解决方法,主要问题仍未解决。

您的目标似乎是通过调用 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