2017-12-01 1 views
1

ich ein lm -Modell mit dem update -function in einem map -Aufruf aktualisieren mag, aber dies führt den folgenden Fehler:ein lineares Regressionsmodell mit Update aktualisiert und purrr

mtcars %>% group_by(cyl) %>% 
nest() %>% 
mutate(lm1 = map(data, ~lm(mpg ~ wt, data = .x)), 
     lm2 = map(lm1, ~update(object = .x, formula = .~ . + hp))) 

Error in mutate_impl(.data, dots) : 
    Evaluation error: cannot coerce class ""lm"" to a data.frame. 

jemand mit mir helfen dieses Problem? Ich bin verwirrt über diesen Fehler, weil z.B. das funktioniert völlig in Ordnung:

mtcars %>% group_by(cyl) %>% 
    nest() %>% 
    mutate(lm1 = map(data, ~lm(mpg ~ wt, data = .x)), 
     lm2 = map_dbl(lm1, ~coefficients(.x)[1])) 

Antwort

1

Dies wird wahrscheinlich mit der Umwelt, wo update ausgewertet wird. Eine einfache Abhilfe ist map2 zu verwenden und explizit die entsprechenden Daten verweisen:

library(tidyverse) 

mtcars %>% group_by(cyl) %>% 
    nest() %>% 
    mutate(lm1 = map(data, ~lm(mpg ~ wt, data = .x)), 
     lm2 = map2(lm1, data, ~update(object = .x, formula. = .~ . + hp, 
             data = .y))) 
#> # A tibble: 3 x 4 
#>  cyl    data  lm1  lm2 
#> <dbl>    <list> <list> <list> 
#> 1  6 <tibble [7 x 10]> <S3: lm> <S3: lm> 
#> 2  4 <tibble [11 x 10]> <S3: lm> <S3: lm> 
#> 3  8 <tibble [14 x 10]> <S3: lm> <S3: lm> 
Verwandte Themen