【发布时间】: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,一旦您提交了修复程序,我将投票结束该问题。再次感谢!