【发布时间】:2019-06-17 15:04:25
【问题描述】:
使用mtcars 数据,我正在测试map() 来构建一些lm() 模型:
library(tidyverse)
mtcars %>%
group_by(cyl) %>%
nest()%>%
mutate(fit = map(.x=data,~lm(mpg ~ ., data = .x)))
#> # A tibble: 3 x 3
#> cyl data fit
#> <dbl> <list> <list>
#> 1 6 <tibble [7 x 10]> <S3: lm>
#> 2 4 <tibble [11 x 10]> <S3: lm>
#> 3 8 <tibble [14 x 10]> <S3: lm>
输出显示我有一个新列fit。
现在我希望看到每个lm 的summary
当我尝试时:
library(tidyverse)
mtcars %>%
group_by(cyl) %>%
nest()%>%
mutate(fit = map(.x=data,~lm(mpg ~ ., data = .x))) %>%
map(fit,summary)
#> Error in as_mapper(.f, ...): object 'fit' not found
它给出了错误:
Error in as_mapper(.f, ...) : object 'fit' not found
如果我想计算R2 或aic,那么我可以毫无问题地使用以下代码:
library(tidyverse)
library(modelr)
mtcars %>%
group_by(cyl) %>%
nest()%>%
mutate(fit = map(.x=data,~lm(mpg ~ ., data = .x))) %>%
mutate(r2 = map_dbl(fit, ~rsquare(., data = mtcars)),
aic = map_dbl(fit, ~AIC(.))) %>%
arrange(aic)
#> # A tibble: 3 x 5
#> cyl data fit r2 aic
#> <dbl> <list> <list> <dbl> <dbl>
#> 1 6 <tibble [7 x 10]> <S3: lm> -8.96 -Inf
#> 2 4 <tibble [11 x 10]> <S3: lm> -26.4 56.4
#> 3 8 <tibble [14 x 10]> <S3: lm> -1.000 67.3
由reprex package (v0.3.0) 于 2019 年 6 月 18 日创建
我错过了什么?
【问题讨论】:
-
对象
fit在全局环境中不存在。虽然许多dplyr函数(如mutate)会在您的 data.frame 中查找对象,但map不会这样做。如果您想查看摘要,可以将map(fit,summary)替换为%>% pull(fit) %>% map(summary)。如果您希望将摘要作为一列,您可以使用%>% mutate(fit_summ = map(fit, summary))