Pisahkan dengan keep() dan discard()
Kita ingin membagi hasil menjadi dua kelompok: hari di atas 100, dan hari di bawah 100. Kita akan menggabungkan keep() dan discard() untuk melakukannya.
Mengapa dua fungsi? Apakah kita tidak bisa menggunakan satu fungsi saja? Apakah kita tidak bisa membuat mapper bernama is_less_than_hundred?
Kita bisa, tetapi itu akan lebih rentan terhadap kesalahan: lebih mudah beralih dari
keep()kediscard()daripada menyalin dan menempel. Dengan menggabungkan kedua fungsi, kita hanya membutuhkan satu mapper. Artinya, jika kita ingin mengubah ambang batas, kita hanya perlu melakukannya sekali, bukan dua kali seperti saat kita memiliki dua mapper.
Ini adalah kaidah yang sebaiknya Anda terapkan saat menulis kode: tulislah kode sedemikian rupa sehingga jika Anda perlu mengubah satu hal, Anda hanya perlu mengubahnya sekali saja.
all_visits masih tersedia di ruang kerja Anda.
Latihan ini adalah bagian dari kursus
Pemrograman Fungsional Tingkat Menengah dengan purrr
Petunjuk latihan
- Map fungsi
set_names()padaall_visitsuntuk menambahkan nama hari:all_visits_named. - Buat mapper bernama
thresholdyang akan menguji apakah.xlebih dari 100. - Buat
group_overdengan menyimpan elemen yang lebih dari 100. - Buat
group_underdengan membuang elemen yang lebih dari 100.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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, ___))