R'deki değişkenleri adlandırmak için tercih ettiğiniz stil nedir? [kapalı]


110

R kodunda değişkenleri ve fonksiyonları adlandırmak için hangi kuralları tercih ediyorsunuz?

Anlayabildiğim kadarıyla, hepsi kakofonik bir uyum içinde bir arada var olan birkaç farklı gelenek var:

1. Nokta ayırıcısının kullanımı, örn.

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

Artıları: R topluluğunda tarihsel önceliğe sahiptir, R çekirdeğinde yaygın olarak görülür ve Google'ın R Stil Kılavuzu tarafından tavsiye edilir .

Eksileri: Nesne yönelimli çağrışımlara sahip Rife ve R yeni başlayanlar için kafa karıştırıcı

2. Alt çizgi kullanımı

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

Artıları: Birçok programlama dilinde ortak bir kural; Hadley Wickham's Style Guide tarafından tercih edilir ve ggplot2 ve plyr paketlerinde kullanılır.

Eksileri: Tarihsel olarak R programcıları tarafından kullanılmaz; Emacs-Speaks-Statistics'deki ("ess-toggle-undercore" ile değiştirilebilir) "<-" operatörüne sinir bozucu bir şekilde eşlenmiştir.

3. Karışık büyük harf kullanımı (camelCase)

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

Artıları: Çeşitli dil topluluklarında geniş çapta benimsenmiş gibi görünüyor.

Eksileri: Yakın zamanda bir emsali var, ancak tarihsel olarak kullanılmıyor (R tabanında veya belgelerinde).

Son olarak, yeterince kafa karıştırıcı değilmiş gibi, Google Stil Kılavuzunun değişkenler için nokta gösterimini, ancak işlevler için karışık büyük harf kullanımını savunduğunu belirtmeliyim.

R paketlerinde tutarlı stil eksikliği, birçok düzeyde sorunludur. Bir geliştirici bakış açısından, başkalarının kodunun bakımını ve genişletilmesini zorlaştırır (özellikle stilinin kendi tarzınızla tutarsız olduğu durumlarda). Bir R kullanıcısı bakış açısından, tutarsız sözdizimi, bir kavramın ifade edilme yollarını çarparak R'nin öğrenme eğrisini dikleştirir (örneğin, tarih döküm fonksiyonu asDate (), as.date () veya as_date () mi? Hayır, as. Date ()).


1
MATLAB tarzı örnekleri de vardır alllowercasedeğişken adları ve düz-den denklemin çok kısa isimlerin bol ( x, yvb.)
Richie Cotton

5
Alt çizgiler python gibidir, bu yüzden alt çizgi kullanma eğilimindeyim. ESS düzeltilmeli, bu gerçekten aptalca.
Brendan OConnor

7
Düzeltecek bir şey yok, bunun için bir geçiş var. Ancak varsayılan davranış , bir alt çizgiyi <- tuşuna basmanız için bir tuş kaydetme kısayolu olarak yorumlamaktır. Bu nedenle, alt çizgili değişkenler yayınlarsanız (Merhaba, Hadley), her ESS kullanıcısını orijinal bahaviour'u almak için _ tuşuna iki kez basmaya veya ESS kurulumunu özelleştirmeye zorlarsınız. Hala camelCase'i yeni bir deniz mili ile tercih ediyorum.
Dirk Eddelbuettel

2
camelCase'de de sorunlar var, örneğin standart deve Çantası ImfDataTransformedveya doğal genişletilmiş sürüm IMFDataTransformedtercih ettiğim TOGGLEcamelCase kadar kolay okunamıyor: IMFdataTransformed...
PatrickT

1
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum çünkü cevaplar fikir temelli olacak.
Ben Bolker

Yanıtlar:


81

Önceki iyi cevaplar bu yüzden buraya eklemek için birazcık:

  • alt çizgiler ESS kullanıcıları için gerçekten can sıkıcıdır; ESS'nin oldukça yaygın olarak kullanıldığı düşünüldüğünde, ESS kullanıcıları tarafından yazılan kodda pek çok alt çizgi görmeyeceksiniz (ve bu set, Hadley gibi istisnalara rağmen CRAN yazarlarının yanı sıra bir grup R Core içerir);

  • Noktalar da kötüdür çünkü basit yöntem gönderiminde karışabilirler; Bir zamanlar R listesinden birinde bu etkiye ilişkin yorumları okuduğuma inanıyorum: noktalar tarihi bir eserdir ve artık teşvik edilmemektedir;

  • bu yüzden son rauntta hala açık bir galibimiz var: camelCase. Ayrıca, 'R topluluğunda öncül eksiklik' iddiasına gerçekten katılıp katılmadığımdan da emin değilim.

Ve evet: pragmatizm ve tutarlılık dogmadan üstündür. Yani meslektaşları ve ortak yazarlar tarafından işe yarayan ve kullanılan şey. Ne de olsa hala beyaz boşluklarımız ve tartışmamız gereken parantezlerimiz var :)


6
+1 İyi dedin! [Yalnızca çekirdek ekip kesin bir stil kılavuzu çıkarırsa; Bunun, halihazırda ima edilen kullanımlarına daha fazla güven vereceğini düşünüyorum.]
Shane

1
Karma vakalara yönelik kendi önyargımdan dolayı yanlış hatırlıyor olabilirdim, ancak RG'nin onun için çalışırken her zaman kullandığı şeyin bu olduğuna inanıyorum. RG için iyi olanın benim için iyi olduğunu anladım!
geoffjentry

Geoff:
Geçmek

2
Başparmak yukarı için teşekkürler. 'Kanonik stil belgesine' gelince: Birlikte dilemek bunu yapmaz, yoksa pembe midillilere binerdim. Belki de R Wiki'ye yapıştırabileceğiniz bir şeyler yazmaya başlayabilirsiniz ve hepimiz onu düzenleyebilir, benimseyebilir ve ona bağlı kalabiliriz. Dedikleri gibi umut sonsuz
yayılır

1
@Dirk - Tavsiyenize göre deve kasasına doğru ilerlemeye başlamayı planlıyorum, ancak ?make.namesnoktayla ayrılmış adların tercih edildiğini neden önerdiğini biliyor musunuz?
David LeBauer

73

CRAN'da gerçekte kullanılan ve R Journal'a kabul edilen adlandırma kurallarının neler olduğuna dair bir anket yaptım :) İşte sonuçları özetleyen bir grafik:

görüntü açıklamasını buraya girin

LowerCamelCase'in en çok işlev adları ve nokta için kullanıldığı ortaya çıktı (belki de sürpriz değil). Ayrılmış adlar en sık parametreler için kullanılır. Google'ın R stil kılavuzunun savunduğu gibi UpperCamelCase'i kullanmak gerçekten nadirdir ve bu adlandırma kuralını kullanmayı savunmaları biraz gariptir.

Makalenin tamamı burada:

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


2
Yüzdelerin toplamı neden% 100 olmuyor?
e9t

10
@ e9t Çünkü bir ad birçok adlandırma kuralına uyabilir. printUpperCamel ve .OTHER_style dışındaki tüm kurallarla eşleşir.
Rasmus Bååth

Bu yazıyı güncellemek güzel olurdu.
Samuel-Rosa

34

Tüm yol boyunca alt çizgi! Yaygın görüşün aksine, R tabanında alt çizgi kullanan bir dizi işlev vardır. grep("^[^\\.]*$", apropos("_"), value = T)Hepsini görmek için koş .

Resmi Hadley kodlama stilini kullanıyorum ;)


1
Bu harika! Daha önce apropos işlevinin farkında değildim . Bu, R 2.9.0'da benim için 10 işlev döndürür; Bunun zorlayıcı bir durum olduğunu söyleyemem. R için açıkça bir azınlıkta olduklarında alt çizgiler için mantığınız nedir?
Shane

3
R 2.10.0'da 16, yani sürüm başına% 60 artış;) Esas olarak onları seviyorum çünkü bana Ruby'yi hatırlatıyorlar; camelCase bana Java'yı hatırlatıyor.
hadley

6
Hadley, kalbim alt çizgi isyanını desteklemeni söylüyor, ama kafam topluluk standartlarına saygı duymanı ve camelCase'e evet demeni söylüyor. :( Belki de önemli olan tek şey kendi kendine tutarlılıktır.
medriscoll

5

Veri türü gibi, deve gerçekten anlamlı bir şey sağladığında camelCase'i seviyorum.

dfProfitLoss, burada df = dataframe

veya

vdfMergedFiles (), burada fonksiyon bir vektör alır ve bir veri çerçevesi verir

_'Nin okunabilirliğe gerçekten katkıda bulunduğunu düşünmeme rağmen, isimlerde.-_ Veya diğer karakterleri kullanmakla ilgili çok fazla sorun var gibi görünüyor. Özellikle birkaç dilde çalışıyorsanız.


3

Bu kişisel tercihlere bağlı, ancak google stil kılavuzunu takip ediyorum çünkü çekirdek ekibin tarzıyla uyumlu. Henüz R tabanındaki bir değişkende alt çizgi görmedim.



2

Başkalarının da bahsettiği gibi, alt çizgiler birçok insanı mahveder. Hayır, verboten değil ama çok da yaygın değil.

Noktaları ayırıcı olarak kullanmak S3 sınıflarında ve benzerlerinde biraz zorlaşır.

Deneyimlerime göre, R'nin yüksek mukavemetli çukurlarının birçoğu, biraz nokta kullanımı ve bir miktar alt çizgi ile camelCase kullanımını tercih ediyor gibi görünüyor.


1

Genellikle değişkenlerimi bir ix alt çizgi ve karışık büyük harf (camelCase) kullanarak yeniden adlandırırım. Basit değişkenler, alt çizgi kullanılarak adlandırılır, örneğin:

PSOE_votes -> PSOE (İspanya'nın siyasi grubu) için oy sayısı.

PSOE_states -> Kategorik, PSOE'nin kazandığı eyaleti gösterir {Aragon, Andalucia, ...)

PSOE_political_force -> Kategoriel, PSOE'nin siyasi grupları arasındaki konumu gösterir {birinci, ikinci, üçüncü)

PSOE_07 -> 2007'de PSOE_votes + PSOE_states + PSOE_political_force Birliği (h -> oylar, eyaletler, pozisyon )

Değişkenim bir / iki Değişkene uygulanan fonksiyonun bir sonucuysa, karışık büyük harf kullanıyorum.

Misal:

positionXstates <- xtabs (~ durumlar + konum, PSOE_07)


0

Karışık başkentleri tercih ediyorum.

Ancak değişken türünün ne olduğunu belirtmek için sıklıkla dönemler kullanırım:

mixedCapitals.mat bir matristir. mixedCapitals.lm doğrusal bir modeldir. mixedCapitals.lst bir liste nesnesidir.

ve bunun gibi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.