MulaiMulai sekarang secara gratis

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() ke discard() 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

Lihat Kursus

Petunjuk latihan

  • Map fungsi set_names() pada all_visits untuk menambahkan nama hari: all_visits_named.
  • Buat mapper bernama threshold yang akan menguji apakah .x lebih dari 100.
  • Buat group_over dengan menyimpan elemen yang lebih dari 100.
  • Buat group_under dengan 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, ___))
Edit dan Jalankan Kode