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

Luc*_*caS 7 r purrr

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

如果我只是重复使用第一列为'y',我想要执行10次回归,每列从1到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)
Run Code Online (Sandbox Code Playgroud)

在这里,我卡住了:

map(df_of_vecs, ~ lm(df_of_vecs[[1]] ~ . ?)
Run Code Online (Sandbox Code Playgroud)

任何提示将不胜感激.

谢谢.

ali*_*ire 7

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

library(purrr)

df_of_vecs %>% 
    names() %>% 
    paste('vec_1 ~', .) %>% 
    map(as.formula) %>% 
    map(lm, data = df_of_vecs)
Run Code Online (Sandbox Code Playgroud)

或者一个:

df_of_vecs %>% 
    names() %>% 
    paste('vec_1 ~', .) %>% 
    map(~lm(as.formula(.x), data = df_of_vecs))
Run Code Online (Sandbox Code Playgroud)

两者都返回十个模型的相同列表.