2015-08-27 35 views
8

Gdy używam broom:::glance w następujący sposób:Korzystanie `miotły ::: glance` w przepływie pracy dplyr z jednego obiektu lm nie

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

uzyskać

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

Jednak, kiedy dodaj group_by:

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

nie daje oczekiwanych rezultatów:

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 

Czy brakuje mi czegoś tutaj, czy jest to błąd w dplyr/miotle?

+0

Czy może to być związane z listą długości 1? 'biblioteka (tidyr); unnest (lista (mtcars, mtcars), gr)%>% group_by (gr)%>% do (model = lm (mpg ~ wt,.))%>% rzut oka (model)' działa – akrun

+0

Rzeczywiście wydaje się, że nie działa, gdy lista wyjściowa 'do' jest po prostu listą długości jeden. –

+0

Dobry połów: to dlatego, że 'do' na niezgrupowanym tbl_df nie zwraca 'rowwise_df', więc metoda' glance.rowwise_df' nie zostanie zastosowana. Otworzyłem [problem dla tego] (https://github.com/dgrtwo/broom/issues/77) i wkrótce go naprawię! –

Odpowiedz

8

Dzieje się tak, ponieważ do, gdy wykonywane na niepogrupowanej tabeli, wyniki w tbl_df zamiast rowwise_df, co oznacza, że ​​miotła stosowane inną metodę. Mam fixed this w najnowszej wersji rozwojowej, tak że można teraz zrobić:

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 

Mam nadzieję, że to ma się na CRAN (miotła 0,4) wkrótce, czy można zainstalować z devtools::install_github("dgrtwo/broom"). W międzyczasie możesz również użyć tymczasowej kolumny grupowania, aby uzyskać pożądane zachowanie:

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)