Splitsen met keep() en discard()
We willen onze resultaten in twee groepen splitsen: de dagen boven de 100 en de dagen onder de 100. We combineren keep() en discard() om dat te doen.
Waarom twee functies? Kunnen we niet één functie gebruiken? Kunnen we geen mapper maken die is_less_than_hundred heet?
Dat kan, maar dat is foutgevoeliger: het is makkelijker om van
keep()naardiscard()te schakelen dan te kopiëren en plakken. Door beide functies te combineren, hebben we maar één mapper nodig. Dat betekent dat als we de drempel willen aanpassen, we dat maar één keer hoeven te doen, niet twee keer, zoals nodig zou zijn als we twee mappers hadden.
Dit is een regel die je bij het programmeren zou moeten toepassen: schrijf je code zo dat je, als je iets moet aanpassen, het maar op één plek hoeft te doen.
all_visits is nog steeds beschikbaar in je werkruimte.
Deze oefening maakt deel uit van de cursus
Gevorderd functioneel programmeren met purrr
Oefeninstructies
- Map de functie
set_names()opall_visitsom de namen van de dagen toe te voegen:all_visits_named. - Maak een mapper
thresholddie test of.xboven de 100 is. - Maak
group_overdoor de elementen te behouden die boven de 100 zijn. - Maak
group_underdoor de elementen weg te laten die boven de 100 zijn.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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, ___))