map() 在每个列表项中创建一个新列
map() to create a new column inside each list item
我有一个 lm()
模型输出列表,例如(下面的可重现示例):
library(tidyverse)
mtcars
model1 <- lm(mpg ~ disp, data = mtcars)
model2 <- lm(mpg ~ disp + hp, data = mtcars)
models <- list(model1, model2)
models
给出的列表如下所示:
[[1]]
Call:
lm(formula = mpg ~ disp, data = mtcars)
Coefficients:
(Intercept) disp
29.59985 -0.04122
[[2]]
Call:
lm(formula = mpg ~ disp + hp, data = mtcars)
Coefficients:
(Intercept) disp hp
30.73590 -0.03035 -0.02484
我可以在列表中的所有模型上使用 map()
到 运行 函数(例如 AIC()
),例如:
map(.x = models, .f = AIC)
每个模型的 returns 个值:
[[1]]
[1] 170.2094
[[2]]
[1] 168.6186
如何获取上面的输出(即 AIC() 函数的输出)并使用它在每个列表项中创建一个新列(即为每个模型创建一个新的 AIC() 输出列) ?
本质上,我正在尝试执行下面的代码,但使用 map()
:
model1$AIC <- AIC(model1)
model2$AIC <- AIC(model2)
首选是 tidyverse map()
解决方案,但我会对任何其他解决方案感到满意。
我们可以使用map
new_model <- purrr::map(models, ~{.x$AIC = AIC(.x);.x})
new_model[[1]]$AIC
#[1] 170.2094
new_model[[2]]$AIC
#[1] 168.6186
同样,我们也可以使用lapply
new_model <- lapply(models, function(x) {x$AIC = AIC(x);x})
我们可以直接应用 AIC
library(purrr)
map_dbl(models, AIC)
#[1] 170.2094 168.6186
如果我们需要更新 'models'
for(i in seq_along(models)) models[[i]][['AIC']] <- AIC(models[[i]])
我有一个 lm()
模型输出列表,例如(下面的可重现示例):
library(tidyverse)
mtcars
model1 <- lm(mpg ~ disp, data = mtcars)
model2 <- lm(mpg ~ disp + hp, data = mtcars)
models <- list(model1, model2)
models
给出的列表如下所示:
[[1]]
Call:
lm(formula = mpg ~ disp, data = mtcars)
Coefficients:
(Intercept) disp
29.59985 -0.04122
[[2]]
Call:
lm(formula = mpg ~ disp + hp, data = mtcars)
Coefficients:
(Intercept) disp hp
30.73590 -0.03035 -0.02484
我可以在列表中的所有模型上使用 map()
到 运行 函数(例如 AIC()
),例如:
map(.x = models, .f = AIC)
每个模型的 returns 个值:
[[1]]
[1] 170.2094
[[2]]
[1] 168.6186
如何获取上面的输出(即 AIC() 函数的输出)并使用它在每个列表项中创建一个新列(即为每个模型创建一个新的 AIC() 输出列) ?
本质上,我正在尝试执行下面的代码,但使用 map()
:
model1$AIC <- AIC(model1)
model2$AIC <- AIC(model2)
首选是 tidyverse map()
解决方案,但我会对任何其他解决方案感到满意。
我们可以使用map
new_model <- purrr::map(models, ~{.x$AIC = AIC(.x);.x})
new_model[[1]]$AIC
#[1] 170.2094
new_model[[2]]$AIC
#[1] 168.6186
同样,我们也可以使用lapply
new_model <- lapply(models, function(x) {x$AIC = AIC(x);x})
我们可以直接应用 AIC
library(purrr)
map_dbl(models, AIC)
#[1] 170.2094 168.6186
如果我们需要更新 'models'
for(i in seq_along(models)) models[[i]][['AIC']] <- AIC(models[[i]])