Aan de slagGa gratis aan de slag

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() naar discard() 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

Cursus bekijken

Oefeninstructies

  • Map de functie set_names() op all_visits om de namen van de dagen toe te voegen: all_visits_named.
  • Maak een mapper threshold die test of .x boven de 100 is.
  • Maak group_over door de elementen te behouden die boven de 100 zijn.
  • Maak group_under door 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, ___))
Code bewerken en uitvoeren