运行 emmeans 的问题(assign '.Last.ref_grid' 中的错误)
Posted
技术标签:
【中文标题】运行 emmeans 的问题(assign \'.Last.ref_grid\' 中的错误)【英文标题】:Problem with running emmeans (error in assign '.Last.ref_grid')运行 emmeans 的问题(assign '.Last.ref_grid' 中的错误) 【发布时间】:2021-07-01 04:12:23 【问题描述】:每当我尝试使用估计的边际均值在组方差分析之间跟踪两种方法时,我一直在运行 emmeans 函数(来自 emmeans 包)时遇到问题。
一个简单的例子:
library(emmeans)
library(tidyverse)
df <- tibble(fct1 = factor(rep(1:3, 10)),
fct2 = factor(rep(2:1, 15)),
DV = rnorm(30, 100, 15))
model1 <- lm(DV ~ fct1 * fct2, df)
emmeans(model1, "fct1", by = "fct2")
返回:
Error in assign(".Last.ref_grid", object, inherits = TRUE) :
cannot change value of locked binding for '.Last.ref_grid'
无论我在什么数据上运行它,总是会出现相同的错误。
感谢您的帮助!
【问题讨论】:
对我来说工作正常,没有任何错误。您是否重新启动 R 并再次尝试? 是的,我做到了。我还更新了所有包、R 和 Rstudio,但无济于事 嗯,我以前从未见过。如果您在全球环境中执行rm(.Last.ref_grid)
,也许它会解决它。
【参考方案1】:
这应该会阻止它:
emm_options(save.ref_grid = FALSE)
这将阻止它保存最近创建的参考网格(或在您的情况下尝试保存)。但是,可能值得尝试了解为什么会发生这种情况。如果你这样做:
.Last.ref_grid
您应该看到上次保存的是什么。这可能是一个线索。并尝试删除它。
【讨论】:
使用 .Last.ref_grid 显示它是一个 emmgrid 对象,由我创建的两个变量组成,这些变量是我在其中一个包中作为一个数据框的一部分创建的。不知道它背后的机制是什么。无论如何,非常感谢您的帮助,我很感激! 它在你的包的命名空间中吗?说作为数据的一部分?如果是这样,你肯定想把它从那里弄出来。如果 emmeans 试图将新版本的参考网格写入您的包命名空间,它将解释您的问题... @Caban 通过在我的包命名空间中添加一个名为.Last.ref_grid
的变量,我能够重现同样的错误。所以我强烈怀疑这就是发生在你身上的事情。执行ls(asNamespace("my-package-name"), all = TRUE)
并查看它是否包含.Last.ref_grid
。如果有,找出它来自哪里;最有可能在一些保存的数据集中。将其从那里取出至关重要,因为这会给任何加载您的包裹的人带来同样的问题!
奇怪。我使用您提供的代码检查了我的包裹中的对象,但它没有显示 .Last.ref_grid
。只有".__NAMESPACE__." ".__S3MethodsTable__." ".packageName"
。实际上,包中没有导致问题的数据框。加载的变量来自我创建的另一个包。加载第二个包不会产生问题。
你是对的,它在 .RData 文件中。我必须直接加载包的 .Rdata,然后从那里用 ls() 检查对象。它现在被删除了。谢谢!以上是关于运行 emmeans 的问题(assign '.Last.ref_grid' 中的错误)的主要内容,如果未能解决你的问题,请参考以下文章
lmer() 的事后测试出错:multcomp() 和 emmeans()