运行 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' 中的错误)的主要内容,如果未能解决你的问题,请参考以下文章

为 R 中的许多列运行具有 emmeans 和对比的 LM

Emmeans 函数 - 参考网格中没有变量

lmer() 的事后测试出错:multcomp() 和 emmeans()

试图返回结构指针

Emmeans 包:str2lang(x) 中的错误:<文本>:1:21:意外符号 [关闭]

我可以从 glmmTMB 的 emmeans 中获取 p 值吗?