Apa gaya yang Anda sukai untuk menamai variabel di R? [Tutup]


110

Konvensi mana untuk penamaan variabel dan fungsi yang Anda sukai dalam kode R?

Sejauh yang saya tahu, ada beberapa konvensi berbeda, yang semuanya hidup berdampingan dalam harmoni yang riuh rendah:

1. Penggunaan pemisah periode, misalnya

  stock.prices <- c(12.01, 10.12)
  col.names    <- c('symbol','price')

Pro: Memiliki latar belakang sejarah dalam masyarakat R, lazim di seluruh inti R, dan direkomendasikan oleh Google R Style Guide .

Kekurangan: Penuh dengan konotasi berorientasi objek, dan membingungkan bagi pemula

2. Penggunaan garis bawah

  stock_prices <- c(12.01, 10.12)
  col_names    <- c('symbol','price')

Kelebihan: Konvensi umum dalam banyak bahasa pemrograman; disukai oleh Panduan Gaya Hadley Wickham , dan digunakan dalam paket ggplot2 dan plyr.

Kekurangan: Tidak secara historis digunakan oleh programmer R; secara menjengkelkan dipetakan ke operator '<-' di Emacs-Speaks-Statistics (dapat diubah dengan 'ess-toggle-underscore').

3. Penggunaan huruf besar campuran (camelCase)

  stockPrices <- c(12.01, 10.12)
  colNames    <- c('symbol','price')

Kelebihan: Tampaknya dapat diadopsi secara luas di beberapa komunitas bahasa.

Kekurangan: Memiliki preseden terkini, tetapi tidak digunakan secara historis (baik dalam basis R atau dokumentasinya).

Akhirnya, seolah-olah itu tidak cukup membingungkan, saya harus menunjukkan bahwa Panduan Gaya Google mengusulkan notasi titik untuk variabel, tetapi kapitalisasi campuran untuk fungsi.

Kurangnya gaya yang konsisten di seluruh paket R menjadi masalah di beberapa level. Dari sudut pandang pengembang, itu membuat pemeliharaan dan perluasan kode orang lain menjadi sulit (khususnya jika gayanya tidak sesuai dengan gaya Anda). Dari sudut pandang pengguna R, sintaks yang tidak konsisten mempertajam kurva pembelajaran R, dengan mengalikan cara sebuah konsep dapat diekspresikan (misalnya apakah fungsi tanggal casting asDate (), as.date (), atau as_date ()? Tidak, itu sebagai. Tanggal()).


1
Ada juga contoh gaya MATLAB alllowercasenama variabel, dan banyak nama yang sangat singkat lurus dari-the-persamaan ( x, y, dll).
Richie Cotton

5
garis bawah seperti python, jadi saya cenderung menggunakan garis bawah. ESS harus diperbaiki, itu sangat konyol.
Brendan OConnor

7
Tidak ada yang perlu diperbaiki, ada tombol untuk itu. Tetapi perilaku defaultnya adalah menafsirkan garis bawah sebagai jalan pintas untuk <- menghemat tombol untuk ditekan. Jadi, jika Anda menerbitkan variabel dengan garis bawah (Hai, Hadley) Anda memaksa setiap pengguna ESS untuk menekan _ dua kali untuk mendapatkan bahasa asli - atau untuk menyesuaikan penyiapan ESS mereka. Saya masih lebih suka CamelCase dengan mil laut baru.
Dirk Eddelbuettel

2
camelCase memiliki masalah juga, misalnya Camel Case standar ImfDataTransformedatau versi natural extended IMFDataTransformedtidak semudah membaca TOGGLEcamelCase yang saya sukai: IMFdataTransformed...
PatrickT

1
Saya memilih untuk menutup pertanyaan ini sebagai di luar topik karena jawabannya pasti berdasarkan opini.
Ben Bolker

Jawaban:


81

Jawaban sebelumnya bagus jadi hanya sedikit untuk ditambahkan di sini:

  • garis bawah sangat mengganggu bagi pengguna ESS; mengingat bahwa ESS cukup banyak digunakan, Anda tidak akan melihat banyak garis bawah dalam kode yang dibuat oleh pengguna ESS (dan set itu mencakup sekumpulan R Core serta penulis CRAN, meskipun demikian pengecualian seperti Hadley);

  • titik juga jahat karena dapat tercampur dalam pengiriman metode sederhana; Saya yakin saya pernah membaca komentar tentang efek ini di salah satu daftar R: titik adalah artefak sejarah dan tidak lagi didorong;

  • jadi kami memiliki pemenang yang jelas masih berdiri di babak terakhir: camelCase. Saya juga tidak yakin apakah saya benar-benar setuju dengan pernyataan 'kurang presenden di komunitas R'.

Dan ya: pragmatisme dan konsistensi mengalahkan dogma. Jadi apa pun yang berhasil dan digunakan oleh kolega dan rekan penulis. Bagaimanapun, kita masih memiliki ruang kosong dan kawat gigi untuk diperdebatkan :)


6
+1 Kata yang bagus! [Andai saja tim inti mengeluarkan panduan gaya definitif; Saya merasa hal itu akan memberikan lebih banyak kepercayaan pada penggunaannya yang sudah tersirat.]
Shane

1
Saya bisa saja salah mengingat berdasarkan bias saya sendiri terhadap kasus campuran tetapi saya percaya itulah yang selalu digunakan RG ketika saya bekerja untuknya. Saya pikir apa yang baik untuk RG baik untuk saya!
geoffjentry

Geoff: Bukan aturan yang buruk untuk dilalui :)
Dirk Eddelbuettel

2
Terima kasih atas jempolnya. Adapun untuk 'dokumen gaya kanonik': berharap bersama tidak berhasil, atau saya akan menunggang kuda poni merah muda. Mungkin Anda bisa mulai dengan membuat sesuatu, yang bisa Anda tempelkan di R Wiki dan kita semua mengedit, mengadopsi, dan mematuhinya. Harapan muncul selamanya, seperti yang mereka katakan ...
Dirk Eddelbuettel

1
@ Dirk - Saya berencana untuk mulai menuju kandang unta berdasarkan rekomendasi Anda, tetapi saya ingin tahu apakah Anda tahu mengapa ?make.namestampaknya menyarankan bahwa nama yang dipisahkan titik lebih disukai?
David LeBauer

73

Saya melakukan survei tentang konvensi penamaan apa yang sebenarnya digunakan di CRAN yang diterima di Jurnal R :) Berikut adalah grafik yang merangkum hasil:

masukkan deskripsi gambar di sini

Ternyata (mungkin tidak ada kejutan) bahwa lowerCamelCase paling sering digunakan untuk nama fungsi dan nama period.separated paling sering digunakan untuk parameter. Namun untuk menggunakan UpperCamelCase, seperti yang disarankan oleh panduan gaya R Google sangat jarang, dan agak aneh bahwa mereka menganjurkan menggunakan konvensi penamaan itu.

Makalah lengkapnya ada di sini:

http://journal.r-project.org/archive/2012-2/RJournal_2012-2_Baaaath.pdf


2
Kenapa persentase tidak berjumlah 100%?
e9t

10
@ e9t Karena sebuah nama bisa cocok dengan banyak konvensi penamaan. printcocok dengan semua konvensi kecuali UpperCamel dan .OTHER_style.
Rasmus Båth

Alangkah baiknya untuk memperbarui tulisan ini.
Samuel-Rosa

34

Garis bawahi sepenuhnya! Bertentangan dengan pendapat umum, ada sejumlah fungsi di basis R yang menggunakan garis bawah. Lari grep("^[^\\.]*$", apropos("_"), value = T)untuk melihat semuanya.

Saya menggunakan gaya pengkodean Hadley resmi ;)


1
Itu rapi! Saya tidak mengetahui fungsi apropos sebelumnya. Ini mengembalikan 10 fungsi untuk saya di R 2.9.0; Saya tidak akan mengatakan itu kasus yang menarik. Apa alasan Anda untuk garis bawah ketika mereka jelas-jelas minoritas untuk R?
Shane

3
Yah itu 16 di R 2.10.0, jadi itu peningkatan 60% per versi;) Saya terutama menyukainya karena mereka mengingatkan saya pada Ruby; camelCase mengingatkan saya pada Java.
hadley

6
Hadley, hatiku berkata untuk mendukung pemberontakan garis bawahmu, tapi kepalaku berkata untuk menghormati standar komunitas, dan katakan ya untuk CamelCase. :( Tapi mungkin yang terpenting adalah konsistensi diri.
medriscoll

5

Saya suka camelCase ketika unta benar-benar memberikan sesuatu yang berarti - seperti tipe data.

dfProfitLoss, dengan df = dataframe

atau

vdfMergedFiles (), di mana fungsinya mengambil vektor dan mengeluarkan kerangka data

Meskipun saya pikir _ benar-benar menambah keterbacaan, sepertinya ada terlalu banyak masalah dengan penggunaan.-_ Atau karakter lain dalam nama. Terutama jika Anda bekerja dalam beberapa bahasa.


3

Ini tergantung pada preferensi pribadi, tetapi saya mengikuti panduan gaya google karena konsisten dengan gaya tim inti. Saya belum melihat garis bawah dalam variabel di basis R.



2

Seperti yang telah disebutkan orang lain, garis bawah akan mengacaukan banyak orang. Tidak, ini bukan verboten tapi juga tidak umum.

Menggunakan titik-titik sebagai pemisah menjadi sedikit rumit dengan kelas S3 dan sejenisnya.

Dalam pengalaman saya, sepertinya banyak muckity muck dari R yang lebih menyukai penggunaan camelCase, dengan beberapa penggunaan titik dan sedikit garis bawah.


1

Biasanya saya mengganti nama variabel saya menggunakan ix garis bawah dan kapitalisasi campuran (camelCase). Variabel sederhana penamaan menggunakan garis bawah, contoh:

PSOE_votes -> jumlah suara untuk PSOE (kelompok politik Spanyol).

PSOE_states -> Categorical, menunjukkan negara bagian di mana PSOE menang {Aragon, Andalucia, ...)

PSOE_political_force -> Categorial, menunjukkan posisi antara kelompok politik PSOE {pertama, kedua, ketiga)

PSOE_07 -> Persatuan PSOE_votes + PSOE_states + PSOE_political_force pada 2007 (h eader -> suara, negara bagian, posisi )

Jika variabel saya adalah hasil dari fungsi yang diterapkan di satu / dua Variabel, saya menggunakan kapitalisasi campuran.

Contoh:

positionXstates <- xtabs (~ status + posisi, PSOE_07)


0

Saya memiliki preferensi untuk mixedCapitals.

Tapi saya sering menggunakan titik untuk menunjukkan jenis variabelnya:

mixedCapitals.mat adalah sebuah matriks. mixedCapitals.lm adalah model linier. mixedCapitals.lst adalah objek daftar.

dan seterusnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.