【问题标题】:Using `broom:::glance` in a dplyr workflow with a single lm object fails在具有单个 lm 对象的 dplyr 工作流中使用 `broom:::glance` 失败
【发布时间】:2015-11-21 22:44:19
【问题描述】:

当我以下列方式使用broom:::glance时:

library(dplyr)
library(broom)
mtcars %>% do(model = lm(mpg ~ wt, .)) %>% glance(model)

我明白了

Error in complete.cases(x) : invalid 'type' (list) of argument

但是,当我添加 group_by:

mtcars %>% group_by(am) %>% do(model = lm(mpg ~ wt, .)) %>% glance(model)

确实给出了预期的结果:

Source: local data frame [2 x 12]
Groups: am

  am r.squared adj.r.squared sigma statistic  p.value df logLik  AIC  BIC deviance df.residual
1  0     0.589         0.565  2.53      24.4 1.25e-04  2  -43.5 93.1 95.9    108.7          17
2  1     0.826         0.810  2.69      52.3 1.69e-05  2  -30.2 66.4 68.1     79.3          11

我在这里遗漏了什么,还是 dplyr/broom 中的错误?

【问题讨论】:

  • 这可能与长度为 1 的列表有关吗? library(tidyr);unnest(list(mtcars, mtcars), gr) %>% group_by(gr) %>% do(model = lm(mpg ~ wt, .)) %>% glance(model) 工作
  • do的输出列表只是长度为1的列表时,似乎确实是这样。
  • 很好:这是因为未分组的 tbl_df 上的 do 不会返回 rowwise_df,因此不会应用 glance.rowwise_df 方法。我已经打开了an issue for this,很快就会修复它!
  • 同时,一个不太难看的解决方法是先按一个虚拟列分组:mtcars %>% group_by(g = 1) %>% do(model = lm(mpg ~ wt, .)) %>% glance(model)。 (添加%>% ungroup() %>% select(-g)后删除虚拟列)
  • 感谢@DavidRobinson,一旦您提交了修复程序,我将投票结束该问题。再次感谢!

标签: r dplyr broom


【解决方案1】:

这是因为do 在未分组的表上执行时会生成tbl_df 而不是rowwise_df,这意味着扫帚使用了不同的方法。我在最新的开发版本中有fixed this,你现在可以这样做:

mtcars %>% do(model = lm(mpg ~ wt, .)) %>% glance(model)
#>   r.squared adj.r.squared    sigma statistic      p.value df    logLik
#> 1 0.7528328     0.7445939 3.045882  91.37533 1.293959e-10  2 -80.01471
#>        AIC      BIC deviance df.residual
#> 1 166.0294 170.4266 278.3219          30

我希望尽快在 CRAN(broom 0.4)上安装它,或者您可以使用devtools::install_github("dgrtwo/broom") 安装。同时,您还可以使用临时分组列来获得所需的行为:

mtcars %>%
    group_by(g = 1) %>%
    do(model = lm(mpg ~ wt, .)) %>% 
    glance(model)
#> Source: local data frame [1 x 12]
#> Groups: g
#> 
#>   g r.squared adj.r.squared    sigma statistic      p.value df    logLik
#> 1 1 0.7528328     0.7445939 3.045882  91.37533 1.293959e-10  2 -80.01471
#> Variables not shown: AIC (dbl), BIC (dbl), deviance (dbl), df.residual
#>   (int)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2018-04-03
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多