keep() ve discard() ile ayır
Sonuçlarımızı iki gruba ayırmak istiyoruz: 100'ün üzerindeki günler ve 100'ün altındaki günler. Bunu yapmak için keep() ve discard() fonksiyonlarını birleştireceğiz.
Neden iki fonksiyon? Tek bir fonksiyon kullanamaz mıyız? is_less_than_hundred adlı bir eşleyici (mapper) oluşturamaz mıyız?
Oluşturabiliriz, ama bu daha fazla hataya açık olurdu: kopyalayıp yapıştırmaktansa
keep()tendiscard()a geçmek daha kolaydır. İki fonksiyonu birlikte kullanarak yalnızca tek bir eşleyiciye ihtiyaç duyarız. Bu da eşik değerini değiştirmek istersek bunu bir kez yapmamızın yeterli olacağı anlamına gelir; iki eşleyicimiz olsaydı iki kez değiştirmemiz gerekirdi.
Bu, kod yazarken uygulamaya çalışman gereken bir kuraldır: Eğer bir şeyi değiştirmen gerekirse, bunu yalnızca bir yerde değiştirmen yetecek şekilde kod yaz.
all_visits çalışma alanında hâlâ mevcut.
Bu egzersiz, kursun bir parçasıdır
purrr ile Orta Düzey Fonksiyonel Programlama
Egzersiz talimatları
- Günlerin adlarını eklemek için
set_names()fonksiyonunuall_visitsüzerinde eşle veall_visits_named'i oluştur. .x100'ün üzerinde mi diye test edecekthresholdadlı bir eşleyici (mapper) oluştur.- 100'ün üzerindeki öğeleri tutarak
group_over'ı oluştur. - 100'ün üzerindeki öğeleri eleyerek
group_under'ı oluştur.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
# 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, ___))