Separă cu keep() și discard()
Vrem să împărțim rezultatele în două grupuri: zilele cu peste 100 de vizite și zilele cu sub 100 de vizite. Vom combina keep() și discard() pentru a face asta.
De ce două funcții? N-am putea folosi una singură? N-am putea crea un mapper numit is_less_than_hundred?
Am putea, dar ar fi mai ușor de greșit: e mai simplu să treci de la
keep()ladiscard()decât să copiezi și să lipești cod. Combinând ambele funcții, avem nevoie de un singur mapper. Asta înseamnă că, dacă vrem să schimbăm pragul, trebuie să o facem o singură dată — nu de două ori, cum ar fi necesar dacă am avea doi mapperi.
Acesta este un principiu pe care ar trebui să îl aplici când scrii cod: structurează-l astfel încât, dacă trebuie să schimbi ceva, să o faci o singură dată.
all_visits este încă disponibil în spațiul tău de lucru.
Acest exercițiu face parte din cursul
Programare funcțională intermediară cu purrr
Instrucțiuni pentru exercițiu
- Aplică funcția
set_names()peall_visitspentru a adăuga numele zilelor:all_visits_named. - Creează un mapper numit
thresholdcare să testeze dacă.xeste mai mare de 100. - Creează
group_overpăstrând elementele care sunt peste 100. - Creează
group_undereliminând elementele care sunt peste 100.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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, ___))