Scinder avec keep() et discard()
Nous voulons diviser nos résultats en deux groupes : les jours au‑dessus de 100 et les jours en dessous de 100. Nous allons combiner keep() et discard() pour y arriver.
Pourquoi deux fonctions? Ne pourrions‑nous pas n'en utiliser qu'une seule? Ne pourrions‑nous pas créer un mappeur nommé is_less_than_hundred?
Nous le pourrions, mais ce serait plus propice aux erreurs : il est plus simple de passer de
keep()àdiscard()que de copier‑coller. En combinant les deux fonctions, nous n'avons besoin que d'un seul mappeur. Ainsi, si nous voulons changer le seuil, nous n'aurons à le faire qu'une seule fois, et non deux comme ce serait le cas avec deux mappeurs.
C'est une règle que vous devriez chercher à appliquer lorsque vous programmez : écrivez votre code de façon à ce que, si vous devez modifier un élément, vous n'ayez à le changer qu'une seule fois.
all_visits est toujours disponible dans votre espace de travail.
Cette activité fait partie du cours
Programmation fonctionnelle intermédiaire avec purrr
Instructions de l’exercice
- Appliquez la fonction
set_names()àall_visitspour ajouter le nom des jours :all_visits_named. - Créez un mappeur nommé
thresholdqui testera si.xest supérieur à 100. - Créez
group_overen conservant les éléments supérieurs à 100. - Créez
group_underen écartant les éléments supérieurs à 100.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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, ___))