首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在map中使用emmeans

不能在map中使用emmeans
EN

Stack Overflow用户
提问于 2018-02-02 13:21:19
回答 2查看 265关注 0票数 2

这是可行的:

代码语言:javascript
复制
testmodel=glm(breaks~wool,data=warpbreaks)
emmeans::emmeans(testmodel,"wool")

这是可行的:

代码语言:javascript
复制
warpbreaks %>%
  group_by(tension) %>%
  do(models=glm(breaks~wool,data=.)) %>% 
  ungroup() %>%
  mutate(means=map(models,~emmeans::emmeans(.x,"wool")))

这不是:

代码语言:javascript
复制
warpbreaks %>%
  group_by(tension) %>% nest() %>%
  mutate(models=map(data,~glm(breaks~wool,data=.x))) %>%
  mutate(means=map(models,~emmeans::emmeans(.x,"wool")))

Error in is.data.frame(data) : object '.x' not found
Error in mutate_impl(.data, dots) : 
  Evaluation error: Perhaps a 'data' or 'params' argument is needed.

知道这是什么原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-03 08:18:42

我想通了。问题在于emmeans尝试从lm/glm对象恢复数据的方式:它尝试运行存储在对象中的调用,如果emmeans()在与原始glm()调用不同的环境中调用,则会失败:

代码语言:javascript
复制
emmeans:::recover_data.lm

下面是一个简单的例子:

代码语言:javascript
复制
wb=warpbreaks
model=glm(breaks~wool,data=wb)
emmeans(model,"wool")
rm(wb)
emmeans(model,"wool")

下面是使用map()实现emmeans()的方法:

代码语言:javascript
复制
warpbreaks %>%
  group_by(tension) %>% nest() %>%
  mutate(models=map(data,~glm(breaks~wool,data=.x))) %>%
  mutate(means=map(models,~emmeans::emmeans(.x,"wool",data=.x$data)))

奇怪的是,recover_data()并没有自动使用lm/glm对象的数据属性,而是假设调用将在当前环境中运行……

票数 4
EN

Stack Overflow用户

发布于 2018-02-02 15:06:22

我们可以分两步完成

代码语言:javascript
复制
df1 <- warpbreaks %>%
            group_by(tension) %>%
            nest() %>%
            mutate(models = map(data,~glm(breaks~wool,data=.x)))                          

warpbreaks %>% 
      split(.$tension) %>% 
       map( ~glm(breaks ~ wool, data = .x) %>%
                emmeans(., "wool")) %>%
       mutate(df1, Means = .) 

# A tibble: 3 x 4
#   tension data              models    Means        
#  <fctr>  <list>            <list>    <list>       
#1 L       <tibble [18 x 2]> <S3: glm> <S4: emmGrid>
#2 M       <tibble [18 x 2]> <S3: glm> <S4: emmGrid>
#3 H       <tibble [18 x 2]> <S3: glm> <S4: emmGrid>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48576160

复制
相关文章

相似问题

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