使用 purrr::map 在数据框中的列上迭代线性模型

Using purrr::map to iterate linear model over columns in data frame

我正在尝试做一个练习,以更加熟悉如何在 purrr 中使用地图功能。我正在创建一些随机数据(10 个数据点的 10 列),然后我想使用 map 对数据框中的结果列执行一系列回归(即 lm(y ~ x, data = ))。

如果我只是重复使用第一列作为 'y',我想对每一列从 1 到 10 执行 10 次回归作为 'x'。显然结果并不重要——重要的是方法。我想以 10 个线性模型对象的列表结束。

list_of_vecs <- list()
for (i in 1:10){ 
 list_of_vecs[[paste('vec_', i, sep = '')]] <- rnorm(10,0,1)
}
df_of_vecs <- as.data.frame(list_of_vecs)

这里,我卡住了:

map(df_of_vecs, ~ lm(df_of_vecs[[1]] ~ . ?)

如有任何提示,我们将不胜感激。

谢谢。

您需要从列名构造公式,然后映射 lm 作为最后一步。你可以用两个 maps:

library(purrr)

df_of_vecs %>% 
    names() %>% 
    paste('vec_1 ~', .) %>% 
    map(as.formula) %>% 
    map(lm, data = df_of_vecs)

或一个:

df_of_vecs %>% 
    names() %>% 
    paste('vec_1 ~', .) %>% 
    map(~lm(as.formula(.x), data = df_of_vecs))

两者return相同的十个模型列表。