Rozdělení pomocí keep() a discard()
Chceme rozdělit výsledky do dvou skupin: dny s hodnotou nad 100 a dny s hodnotou pod 100. K tomu využijeme kombinaci keep() a discard().
Proč dvě funkce? Nestačila by jedna? Nemohli bychom vytvořit mapper is_less_than_hundred?
Mohli, ale bylo by to náchylnější k chybám: přepnout z
keep()nadiscard()je snazší než kopírovat a vkládat kód. Díky kombinaci obou funkcí stačí jeden mapper. Pokud bychom chtěli změnit prahovou hodnotu, stačí to udělat na jednom místě – na rozdíl od situace, kdy bychom měli dva mappery a museli bychom změnu provést dvakrát.
Toto je pravidlo, které se vyplatí při programování dodržovat: piš kód tak, aby každou změnu stačilo udělat jen jednou.
all_visits je stále dostupné v tvém pracovním prostředí.
Toto cvičení je součástí kurzu
Intermediate Functional Programming with purrr
Pokyny k cvičení
- Aplikuj funkci
set_names()naall_visitspomocímap(), aby se přidaly názvy dní:all_visits_named. - Vytvoř mapper s názvem
threshold, který otestuje, zda je.xvětší než 100. - Vytvoř
group_overtak, že zachováš prvky s hodnotou nad 100. - Vytvoř
group_undertak, že odstraníš prvky s hodnotou nad 100.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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, ___))