Zacznij terazZacznij za darmo

Podział z keep() i discard()

Chcemy podzielić wyniki na dwie grupy: dni z wartością powyżej 100 i dni z wartością poniżej 100. Użyjemy do tego keep() i discard().

Po co dwie funkcje? Czy nie wystarczyłaby jedna? Czy nie można by stworzyć mappera o nazwie is_less_than_hundred?

Można, ale to podejście jest bardziej podatne na błędy: łatwiej jest przełączyć się między keep() a discard(), niż kopiować i wklejać kod. Łącząc obie funkcje, potrzebujemy tylko jednego mappera. Oznacza to, że jeśli zechcemy zmienić próg, wystarczy zrobić to raz – a nie dwa razy, jak byłoby konieczne przy dwóch mapperach.

To zasada, którą warto stosować podczas programowania: pisz kod tak, żeby zmiana jednej rzeczy wymagała modyfikacji tylko w jednym miejscu.

all_visits jest nadal dostępne w twoim środowisku roboczym.

To ćwiczenie jest częścią kursu

Funkcyjne programowanie średnio zaawansowane z purrr

Zobacz kurs

Instrukcje do ćwiczenia

  • Zastosuj funkcję set_names() na all_visits, aby dodać nazwy dni: all_visits_named.
  • Utwórz mapper o nazwie threshold, który sprawdzi, czy .x jest większe niż 100.
  • Utwórz group_over, zachowując elementy o wartości powyżej 100.
  • Utwórz group_under, odrzucając elementy o wartości powyżej 100.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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, ___))
Edytuj i uruchom kod