7

purrr でマップ機能を使用する方法に慣れるための演習をしようとしています。いくつかのランダム データ (10 データポイントの 10 列) を作成してから、マップを使用して、データ フレームの結果の列に対して一連の回帰 (つまり lm(y ~ x, data = )) を実行したいと考えました。

最初の列を「y」として繰り返し使用する場合、1 から 10 までの各列を「x」として 10 回の回帰を実行します。明らかに、結果は重要ではありません。それは単なる方法です。最終的に 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

You need to construct the formulas from the column names, and then map lm as the last step. You can do this with two maps:

library(purrr)

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

or one:

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

Both return the same list of ten models.

于 2016-12-13T01:04:51.580 に答える