r - 使用 update 和 purrr 更新线性回归模型

标签 r lm purrr

我想在 map 调用中使用 update 函数更新 lm 模型,但这会引发以下错误:

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.

谁能帮我解决这个问题?我对这个错误感到困惑,因为例如这完全正常:

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

最佳答案

这可能与评估update 的环境有关。一个简单的解决方法是使用 map2 并显式引用相应的数据:

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>

关于r - 使用 update 和 purrr 更新线性回归模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47590037/

相关文章:

用 R 按不同的列排列 [0,1]

r - 将函数应用于数据框的子集

r - 如何在其中一个方面添加一条线?

r - 在 R 中执行线性回归时使用实验不确定性

r - 如何最小化 "lm"类对象的大小而不影响将其传递给 predict()

r - 将表达式添加到 ggplot 轴刻度线

r - 使用 lm 更改分类变量和引用类别的顺序

r - 使用 purrr 从数据帧映射字符串

r - purrr:modify2 和 modify_at

r - 基于至少一个共同值对 Id 进行分组