7

我正在尝试做一个练习,以更加熟悉如何在 purrr 中使用地图功能。我正在创建一些随机数据(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)

在这里,我卡住了:

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

任何提示将不胜感激。

谢谢。

4

1 回答 1

10

您需要从列名构造公式,然后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))

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

于 2016-12-13T01:04:51.580 回答