Operator ekstrak R: [vs $ [duplikat]

Sep 28 2020

Ada banyak postingan di internet mengenai perbedaan dan persamaan tentang [dan $. Saya melihat beberapa posting di mana $direkomendasikan hanya untuk penggunaan interaktif tetapi tidak untuk pemrograman. Namun, saya tidak yakin saya mengerti apakah ini adalah preferensi atau ada penjelasan di balik gagasan ini.

Sekarang katakanlah saya sedang menulis paket atau fungsi, jika saya mengekstrak elemen dengan nama (misalnya, mtcars[["mpg"]]) mengapa saya harus menghindari penggunaan mtcars$mpg?

Jawaban

5 GregorThomas Sep 28 2020 at 17:42

Ada dua perbedaan yang sangat penting antara [[dan $:

  1. [[- bekerja dengan string (yaitu mendukung substitusi variabel), $tidak. Jika Anda memiliki my_var = "mpg", Anda dapat menggunakan mtcars[[my_var]], tapi tidak ada cara yang baik untuk digunakan my_vardengan $.

  2. $pelengkapan otomatis, jika nama kolom sebagian tidak ambigu. mtcars$makan mengembalikan mpgkolom, mtcars[["m"]]akan kembali NULL. mtcars$dakan kembali NULLkarena beberapa kolom dimulai dengan "d".

# 1 membuat [[lebih fleksibel untuk pemrograman - sangat umum dalam penggunaan terprogram untuk bekerja dengan nama kolom yang disimpan sebagai string.

# 2 membuat $lebih berbahaya - Anda tidak boleh menggunakan nama kolom yang disingkat dalam pemrograman, namun dalam penggunaan interaktif itu bisa bagus dan cepat. (Meskipun ini sebagian besar diperdebatkan dengan fitur penyelesaian otomatis RStudio, jika Anda menggunakan IDE itu.)

2 StéphaneLaurent Sep 28 2020 at 17:40

$melakukan pencocokan parsial: jika Anda memiliki kolom bernama xxxdalam dataframe dat, maka dat$xxakan mengembalikan xxxkolom tersebut (kecuali jika Anda juga memiliki xxkolom). Ini bisa berbahaya.

Saya selalu menggunakan [["..."]]untuk alasan lain: Saya menggunakan RStudio, dan ada penyorotan yang bagus untuk string, sedangkan tidak ada penyorotan dengan $.