首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将编程的as.formula()传递给emmeans::emmeans()时引发的错误??

将编程的as.formula()传递给emmeans::emmeans()时引发的错误??
EN

Stack Overflow用户
提问于 2018-02-23 19:39:39
回答 1查看 270关注 0票数 1

您可以从以下https://gist.github.com/markhwhiteii/6ce74461a789ddc6d04044de73d99939获取引用的数据:

我可以通过一个多项逻辑模型的交互来通过硬编码来获得后临时测试:

代码语言:javascript
运行
复制
library(nnet)
library(emmeans)
model <- multinom(outcome ~ cond * party, data)
emmeans(model, ~ outcome + cond | party)

但是,我需要有一个包装器函数。如果我有变量的输入,然后传递这些as.formula(),那么我就会得到一个错误:

代码语言:javascript
运行
复制
iv <- "cond"
dv <- "outcome"
mod <- "party"
formula <- as.formula(paste(dv, "~", iv, "*", mod))
model <- multinom(formula, data)
emmeans(model, as.formula(paste("~", dv, "+", iv, "|", mod)))

emmeans的调用生成:

代码语言:javascript
运行
复制
Error in object$call$formula[[2]] : 
  object of type 'symbol' is not subsettable

它似乎来自于multinom函数,因为我可以在emmeans中得到粘贴的公式来运行硬编码的multinom模型。这很奇怪,因为我已经得到了这个方法来处理lmglmclm模型。我查看了两个model对象的结构,它们似乎是相同的。重要的是,两者的model$terms是相同的。emmeans调用一个函数,该函数调用调用方法等的函数,因此很难使用调试器确定错误发生在何处。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-23 20:26:56

我想出了个办法来绕过这件事。multinom将对象名formula (而不是公式本身)存储到模型的call属性中:

代码语言:javascript
运行
复制
iv <- "cond"
dv <- "outcome"
mod <- "party"
formula <- as.formula(paste(dv, "~", iv, "*", mod))
model <- multinom(formula, data)
model$call$formula

返回字符formula

然后,我可以用以下方法重新创建错误:

代码语言:javascript
运行
复制
> model$call$formula[[2]]
Error in model$call$formula[[2]] : 
  object of type 'symbol' is not subsettable

所以,我只是手动地写下了multinom存储的内容:

代码语言:javascript
运行
复制
iv <- "cond"
dv <- "outcome"
mod <- "party"
formula <- as.formula(paste(dv, "~", iv, "*", mod))
model <- multinom(formula, data)
model$call$formula <- formula
emmeans(model, as.formula(paste("~", dv, "+", iv, "|", mod)))

而且它是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48955107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档