使用 purrr::map() 从多个模型中提取 r.squared

Extract r.squared from multiple models with purrr::map()

我有以下三个线性模型:

models <- mtcars %>% 
  split(.$cyl) %>% 
  map(~lm(mpg ~ wt, data = .))

现在我想从所有具有 purrr::map() 的三个模型中提取 r.squared。 我尝试了以下两种方法,但它们都产生了错误(即“错误:无法将 summaryDefault/table 对象转换为函数”):

models %>% 
  map(summary) %>% 
  map_dbl(~.$r.squared)

models %>% 
  map(summary) %>% 
  map_dbl("r.squared")

问题是什么,如何解决?

library(tidyverse)

models <- mtcars %>% 
  split(.$cyl) %>% 
  map(~lm(mpg ~ wt, data = .))

手动完成你可以做到:

summary(models[[1]])$r.squared

然后使用 map:

#and in map loop map_dfr
map_dfr(models, ~summary(.)$r.squared)
# # A tibble: 1 x 3
#     `4`   `6`   `8`
#   <dbl> <dbl> <dbl>
# 1 0.509 0.465 0.423

 map_dfr(models, ~ glance(.x) %>%
                   dplyr::select(r.squared))

# A tibble: 3 x 1
#  r.squared
#      <dbl>
#1     0.509
#2     0.465
#3     0.423
by_cyl <- split(mtcars, mtcars$cyl)

by_cyl %>% 
  map(~ lm(mpg ~ wt, data = .x)) %>%
  map(summary) %>%
  map_dbl('r.squared')

https://adv-r.hadley.nz/functionals.html