Ketika saya perlu memfilter data.frame, yaitu, mengekstrak baris yang memenuhi kondisi tertentu, saya lebih suka menggunakan subset
fungsi:
subset(airquality, Month == 8 & Temp > 90)
Alih-alih [
fungsi:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Ada dua alasan utama untuk preferensi saya:
Saya menemukan kode membaca lebih baik, dari kiri ke kanan. Bahkan orang yang tidak tahu apa-apa tentang R bisa mengatakan apa yang dilakukan
subset
pernyataan di atas.Karena kolom dapat disebut sebagai variabel dalam
select
ekspresi, saya dapat menyimpan beberapa penekanan tombol. Dalam contoh saya di atas, saya hanya perlu mengetikairquality
satu kalisubset
, tetapi tiga kali dengan[
.
Jadi saya hidup bahagia, menggunakan subset
mana mana karena lebih pendek dan membaca lebih baik, bahkan menganjurkan keindahannya kepada sesama R coders saya. Tapi kemarin duniaku pecah. Saat membaca subset
dokumentasi, saya perhatikan bagian ini:
Peringatan
Ini adalah fungsi kenyamanan yang dimaksudkan untuk digunakan secara interaktif. Untuk pemrograman, lebih baik menggunakan fungsi standar subsetting seperti [, dan khususnya evaluasi subset argumen non-standar dapat memiliki konsekuensi yang tidak terduga.
Bisakah seseorang membantu menjelaskan apa yang dimaksud penulis?
Pertama, apa yang mereka maksud dengan " untuk digunakan secara interaktif "? Saya tahu apa sesi interaktif itu, sebagai lawan dari skrip dijalankan dalam mode BATCH tapi saya tidak melihat perbedaan apa yang harus dibuat.
Lalu, bisakah Anda menjelaskan " evaluasi non-standar dari subset argumen " dan mengapa itu berbahaya, mungkin memberikan contoh?
dplyr::filter
memiliki masalah yang sama. Yaitu jika lingkungan kebetulan memiliki variabel dengan nama itu, ia akan menggunakannya sebagai ganti variabel dalam bingkai data. Membuat debugging membingungkan!
with(airquality, airquality[Month == 8 & Temp > 90, ])