我正在开展一个大型 R 项目,以对公共数据集执行不同的分析。我为每个分析构建了几个单独的脚本,以及按顺序调用每个脚本的高级脚本。每个脚本首先调用一个init.R
擦除内存的脚本 ( rm(list=ls(all=TRUE))
)。
我最近发现summary()
(并且,我认为coef()
)会根据脚本的顺序产生不同的输出。lm()
在使用or gam()
(包)拟合模型的脚本中mgcv
,如果首先运行这些脚本,则在“新” R 会话中,summary()
输出会列出带有完整标签的因子。
但是,如果我首先运行其他脚本,这些脚本使用简单的嵌套aov()
函数并使用其他一些包生成一些图形和其他输出,然后重新运行前面提到的脚本,summary()
而不是生成使用数字标记的因子级别的输出(“编码”值,而不是实际的因子水平标签)。
不幸的是,这不是我可以使用最小的工作示例轻松“重现”的东西,因为我还没有完全确定在我的脚本中这种行为发生了哪些变化。我在快速测试中确认了一些事情:
- 在脚本之间使用 清除内存
rm(list=ls())
,因此内存中不应有任何内容导致此更改。 summary()
本身并没有改变:模型拟合函数实际上产生的输出略有不同(如 确认all.equal()
),这更令人不安。以不同顺序运行脚本时生成的已保存对象在加载时可靠地生成相同的输出,但该输出根据用于生成拟合模型对象的脚本顺序而有所不同(即使在每个脚本之间清除了内存)。- 根据脚本的顺序,
summary( lm(...) )
还输出模型项的不同估计值,但残差摘要、R^2 和整体 F 检验相同。很奇怪。
- 根据脚本的顺序,
- 我无法通过删除先前脚本中加载的包来恢复默认(所需)行为。加载包的顺序重要吗?
- 退出并重新启动 R 后恢复默认行为
- 这个答案似乎没有解决问题: Reset R instance
理想情况下,我希望我的项目能够通过简单地source()
依次执行每个脚本来重现所有结果和输出,但是这个奇怪的“错误”(在我的代码中 - 我不是将此归咎于 R)意味着输出不是一致并取决于顺序:(
除了保留在内存中的对象或包之外,还有什么东西可以改变模型拟合函数的工作方式,或者将因子级别存储在传入的数据框中?
编辑
我意识到上述问题的答案是对比选项(见下文)。新问题:
如何将 options() 重置为默认设置,即 R 启动时使用的值?“出厂默认设置”是
options(contrasts=c("contr.treatment","contr.poly")))
,但我想知道是否有办法重新启动到内部默认设置(以防它们不是“出厂默认设置”。