Aufteilen mit keep() und discard()
Wir wollen unsere Ergebnisse in zwei Gruppen aufteilen: Tage über 100 und Tage unter 100. Dafür kombinieren wir keep() und discard().
Warum zwei Funktionen? Könnten wir nicht eine einzige verwenden? Könnten wir nicht einen Mapper namens is_less_than_hundred erstellen?
Das ginge, wäre aber fehleranfälliger: Es ist einfacher, von
keep()zudiscard()zu wechseln, als zu kopieren und einzufügen. Indem wir beide Funktionen kombinieren, brauchen wir nur einen Mapper. Das bedeutet: Wenn wir den Schwellenwert ändern wollen, müssen wir es nur einmal tun und nicht zweimal, wie es mit zwei separaten Mappern nötig wäre.
Das ist eine Regel, die du dir beim Programmieren angewöhnen solltest: Schreib Code so, dass du eine Sache nur an einer Stelle ändern musst.
all_visits ist weiterhin in deinem Workspace verfügbar.
Diese Übung ist Teil des Kurses
<Kurs>Fortgeschrittene funktionale Programmierung mit purrr</Kurs>Übungsanweisungen
- Wende die Funktion
set_names()aufall_visitsan, um die Tagesnamen hinzuzufügen:all_visits_named. - Erstelle einen Mapper namens
threshold, der prüft, ob.xüber 100 liegt. - Erstelle
group_over, indem du die Elemente beibehältst, die über 100 liegen. - Erstelle
group_under, indem du die Elemente verwirfst, die über 100 liegen.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# Set the name of each subvector
day <- c("mon", "tue", "wed", "thu", "fri", "sat", "sun")
all_visits_named <- ___(all_visits, ~ ___(.x, ___))
# Create a mapper that will test if .x is over 100
threshold <- ___
# Run this mapper on the all_visits_named object: group_over
group_over <- ___(all_visits_named, ~ ___(.x, ___))
# Run this mapper on the all_visits_named object: group_under
group_under <- ___(all_visits_named, ~ ___(.x, ___))