Dela upp med keep() och discard()
Vi vill dela upp resultaten i två grupper: dagar med över 100 besök och dagar med under 100 besök. Vi kombinerar keep() och discard() för att åstadkomma det.
Varför två funktioner? Räcker det inte med en? Skulle vi inte kunna skapa en mapper som heter is_less_than_hundred?
Det skulle vi kunna göra, men det ökar risken för fel: det är enklare att byta mellan
keep()ochdiscard()än att kopiera och klistra in kod. Genom att kombinera de två funktionerna behöver vi bara en mapper. Det innebär att om vi vill ändra tröskelvärdet behöver vi bara göra det en gång – inte två gånger, som vi hade behövt om vi hade haft två separata mappers.
Detta är en princip du bör sträva efter när du kodar: skriv kod så att om du behöver ändra något, räcker det att ändra det på ett ställe.
all_visits finns fortfarande tillgänglig i din arbetsyta.
Den här övningen är en del av kursen
Funktionell programmering på mellannivå med purrr
Övningsinstruktioner
- Använd funktionen
set_names()påall_visitsmedmap()för att lägga till namnen på dagarna:all_visits_named. - Skapa en mapper med namnet
thresholdsom testar om.xär över 100. - Skapa
group_overgenom att behålla de element som är över 100. - Skapa
group_undergenom att ta bort de element som är över 100.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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, ___))