首页 > 解决方案 > R: set.seed 去除种子后产生相同的结果

问题描述

背景。我想在for循环中生成随机序列R v.3.5.0。为此,我使用如下代码:

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但现实是不同的——即使在删除from之后,我也会收到完全相同的列表globalenv()。请参阅附有确切命令 序列的屏幕:命令序列

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

我的问题是:

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

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

提前致谢。

标签: rrandom-seed

解决方案


看起来您的目标是通过调用来实现随机行为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


推荐阅读