Podział z keep() i discard()
Chcemy podzielić wyniki na dwie grupy: dni z wartością powyżej 100 i dni z wartością poniżej 100. Użyjemy do tego keep() i discard().
Po co dwie funkcje? Czy nie wystarczyłaby jedna? Czy nie można by stworzyć mappera o nazwie is_less_than_hundred?
Można, ale to podejście jest bardziej podatne na błędy: łatwiej jest przełączyć się między
keep()adiscard(), niż kopiować i wklejać kod. Łącząc obie funkcje, potrzebujemy tylko jednego mappera. Oznacza to, że jeśli zechcemy zmienić próg, wystarczy zrobić to raz – a nie dwa razy, jak byłoby konieczne przy dwóch mapperach.
To zasada, którą warto stosować podczas programowania: pisz kod tak, żeby zmiana jednej rzeczy wymagała modyfikacji tylko w jednym miejscu.
all_visits jest nadal dostępne w twoim środowisku roboczym.
To ćwiczenie jest częścią kursu
Funkcyjne programowanie średnio zaawansowane z purrr
Instrukcje do ćwiczenia
- Zastosuj funkcję
set_names()naall_visits, aby dodać nazwy dni:all_visits_named. - Utwórz mapper o nazwie
threshold, który sprawdzi, czy.xjest większe niż 100. - Utwórz
group_over, zachowując elementy o wartości powyżej 100. - Utwórz
group_under, odrzucając elementy o wartości powyżej 100.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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, ___))