Vergleich zwischen dplyr :: do / purrr :: map, welche Vorteile? [geschlossen

Beim Benutzenbroom Ich wurde verwendet, um @ zu kombinierdplyr::group_by unddplyr::do, um dank @drob Aktionen für gruppierte Daten auszuführen. Beispiel: Ein lineares Modell wird je nach Getriebesystem an Autos angepasst:

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

Nachdem ich den letzten Beitrag von @hadley über @ gelesen hatidyr v0.4.1 Ich entdeckte, dass das gleiche mit @ erreicht werden könnnest() undpurrr::map()

Beispiel wie vorher:

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

Die Reihenfolge hat sich geändert, aber die Ergebnisse sind gleich.

Da beide weitgehend denselben Anwendungsfall ansprechen, frage ich mich, ob beide Ansätze in Zukunft unterstützt werden. Wird die Methode zum kanonischentidyverse Weg? Wenn man nicht als kanonisch gilt, welche Anwendungsfälle erfordern, dass beide Ansätze weiterhin unterstützt werden?

Aus meiner kurzen Erfahrung:

tu Fortschrittsbalken, schön, wenn viele Modelle berechnet werden.@ Axeman Kommentar: Kann mit @ parallelisiert werdmultidplyrkleineres Objekt, muss aber erneut ausgeführt werden, wenn wir wollenbroom::glance fx.KartDaten, Teilmengen und Modelle bleiben in einemtbl_dfEinfaches Extrahieren einer anderen Modellkomponente, auch wennunnest() braucht ein bisschen Zeit.

Wenn Sie einige Einblicke / Anmerkungen haben, freuen wir uns über Feedback.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage