8

purrr パッケージのみを使用して、ネストされたリストから要素を抽出するにはどうすればよいですか? この場合、data.frame を分割した後にインターセプトのベクトルを取得したいと考えています。lapply() を使用して必要なことを達成しましたが、関数 purrr パッケージのみを使用したいと考えています。

library(purrr)
mtcars %>% 
split(.$cyl) %>%
map(  ~lm(mpg ~ wt, data = .)) %>%        # shorthand  NOTE: ~ lm  
lapply(function(x) x[[1]] [1]) %>% # extract intercepts  <==is there a purrr function for this line?
as_vector()                               # convert to vector

map() と at_depth() を試しましたが、何もうまくいかないようです。

4

2 に答える 2

19

関数には、mapネストされたリストにインデックスを付けるための簡略化されたコーディングがいくつかあります。ヘルプページからの役立つスニペット:

ネストされたリストに深くインデックスを付けるには、複数の値を使用します。c("x", "y") は z[["x"]][["y"]] と同等です。

したがって、ネストされたインデックスのコードをベクトルに縮小する とともに使用するとmap_dbl、次のように簡単に実行できます。

mtcars %>%
    split(.$cyl) %>%
    map(~lm(mpg ~ wt, data = .)) %>%
    map_dbl(c(1, 1))

       4        6        8 
39.57120 28.40884 23.86803 

また、purrr 0.1.0 を紹介するこのブログ投稿も役に立ちました。これは、私が最終的に使用することになった短縮コーディングの例をいくつか示しているからです。

于 2016-01-12T19:24:24.263 に答える