Narzędzia użytkownika

Narzędzia witryny


r_dplyr_potoki

To jest stara wersja strony!


Spis treści

Potoki

Wstęp

Przekształcanie danych sprowadza się do wykonywania serii kolejnych operacji filtrowania, złączania, agregowania, itd.

Generalnie istnieją dwa sposoby zapisywania serii takich operacji w R:

  • Poprzez przypisywanie wyników każdej operacji z osobna do zmiennej:
    wynik = filter(dane, warunek1, warunek2)
    wynik = group_by(wynik, kolumna)
    wynik = summarize(wynik, agregat = mean(kolumna)
    ...
    • Tego typu zapis jest nieefektywny, bowiem powoduje wielokrotne przepisywanie danych w pamięci (za każdym razem zmienna wynik jest niszczona i zapisywana na nowo nowymi danymi).
      • Problem ten dotyczy szczególnie funkcji R z pakietu base, które nie zarządzają pamięcią nazbyt efektywnie.
  • Poprzez zagnieżdżanie wywołań funkcji:
    wynik = summarize(
      group_by(
        filter(dane, warunek1, warunek2),
        kolumna
      ),
      agregat = mean(kolumna)
    )
    • Zapis ten jest dość nieczytelny.

Zauważmy przy tym, że przedstawione wyżej operacje sprowadzają się tak naprawdę do ciągłego przekazywania wyników działania poprzedniej funkcji do kolejnej. Mając operator (załóżmy, że ma on postać %>%), który umie przekazać wynik operacji po swojej lewej stronie jako pierwszy argument funkcji po swojej prawej stronie (tzw. potok), moglibyśmy zastosować zapis:

wynik = dane %>% 
  filter(warunek1, warunek2) %>%
  group_by(kolumna) %>%
  summarize(agregat = mean(kolumna)

Taki zapis łączy pozytywy zapisów omówionych na początku:

  • jest przejrzysty;
  • jest efektywny.

Jest on możliwy dzięki pakietowi magnittr, przy czym pakiet dplyr automatycznie ładuje także pakiet magnittr.

Debugowanie

Pewnych trudności może nastręczać wyszukiwanie błędów w zapisie używającym potoków. Z pomocą przychodzi pakiet ensurer, patrz też winietka pakietu.

r_dplyr_potoki.1418811229.txt.gz · ostatnio zmienione: 2014/12/17 11:13 przez zozlak