@drobのおかげで、グループ化されたデータbroom
を組み合わせdplyr::group_by
てアクションを実行するのに慣れていました。dplyr::do
たとえば、ギア システムに応じて線形モデルを車に当てはめると、次のようになります。
library("dplyr")
library("tidyr")
library("broom")
# using do()
mtcars %>%
group_by(am) %>%
do(tidy(lm(mpg ~ wt, data = .)))
# Source: local data frame [4 x 6]
# Groups: am [2]
# am term estimate std.error statistic p.value
# (dbl) (chr) (dbl) (dbl) (dbl) (dbl)
# 1 0 (Intercept) 31.416055 2.9467213 10.661360 6.007748e-09
# 2 0 wt -3.785908 0.7665567 -4.938848 1.245595e-04
# 3 1 (Intercept) 46.294478 3.1198212 14.838824 1.276849e-08
# 4 1 wt -9.084268 1.2565727 -7.229401 1.687904e-05
@hadley からの最近の投稿を読んだ後、と を使用しtidyr v0.4.1
て同じことが達成できることを発見しましたnest()
purrr::map()
前と同じ例:
by_am <- mtcars %>%
group_by(am) %>%
nest() %>%
mutate(model = purrr::map(data, ~ lm(mpg ~ wt, data = .)))
by_am %>%
unnest(model %>% purrr::map(tidy))
# Source: local data frame [4 x 6]
# am term estimate std.error statistic p.value
# (dbl) (chr) (dbl) (dbl) (dbl) (dbl)
# 1 1 (Intercept) 46.294478 3.1198212 14.838824 1.276849e-08
# 2 1 wt -9.084268 1.2565727 -7.229401 1.687904e-05
# 3 0 (Intercept) 31.416055 2.9467213 10.661360 6.007748e-09
# 4 0 wt -3.785908 0.7665567 -4.938848 1.245595e-04
順序は変更されましたが、結果は同じです。
どちらも大部分が同じユースケースに対応していることを考えると、両方のアプローチが今後サポートされるかどうか疑問に思っています. メソッドは正規の方法になりtidyverse
ますか? 一方が標準的と見なされない場合、両方のアプローチを引き続きサポートする必要があるユース ケースは何ですか?
私の短い経験から:
- 行う
- プログレスバー、多くのモデルが計算されている場合に便利です。
- @Axeman コメント: を使用して並列化できます
multidplyr
broom::glance
オブジェクトは小さくなりますが、 fxが必要な場合は再実行する必要があります。
- 地図
- データ、サブセット、およびモデルが 1 つに保持されます
tbl_df
unnest()
少し時間がかかる場合でも、モデルの別のコンポーネントを簡単に抽出できます。
- データ、サブセット、およびモデルが 1 つに保持されます
洞察やコメントがあれば、喜んでフィードバックをお寄せください。