r - 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)如果不工作如何重置种子?
提前致谢。
解决方案
看起来您的目标是通过调用来实现随机行为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
。
推荐阅读
- r - 通过部分匹配删除/覆盖行
- sharepoint - 从 SharePoint Drive 项目获取 SharePoint 列表 ID
- hadoop - Yarn 看不到资源和节点
- python - 如何从 Django 表单中读取字典对象?
- flutter - Flutter Riverpod:StreamProvider/FutureProvider 组合的重建太多
- node.js - 通过 node.js 中的 razorpay 支付网关集成向不同的银行账户付款
- jenkins - 如何重新触发 Jenkinsfile 中的阶段
- javascript - Cloudinary 配置不是从 .env 文件中读取数据
- python - Discord.py 审核事件
- docker - 使用 imageinspector 对 docker 图像进行 clamav 扫描的更多输出