Rで変数を命名するための好ましいスタイルは何ですか?[閉まっている]


110

変数と関数の命名規則として、Rコードではどの規則を使用しますか?

私の知る限りでは、いくつかの異なる規則があり、それらはすべて不協和音で共存します。

1.ピリオドセパレータの使用、例えば

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

長所: Rコミュニティで歴史的な優先順位があり、Rコア全体に普及しており、GoogleのRスタイルガイドで推奨されています

短所: オブジェクト指向の意味合いで溢れ、R初心者を混乱させる

2.アンダースコアの使用

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

長所: 多くのプログラミング言語で共通の規則。Hadley WickhamのStyle Guideに支持され、ggplot2およびplyrパッケージで使用されています。

短所: Rプログラマーがこれまで使用していない。Emacs-Speaks-Statistics(「ess-toggle-underscore」で変更可能)の「<-」演算子にうっとうしくマッピングされます。

3.混合大文字の使用(camelCase)

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

長所:いくつかの言語コミュニティで広く採用されているようです。

短所:最近の前例がありますが、(Rベースまたはそのドキュメントで)歴史的に使用されていません。

最後に、それが十分に混乱していないかのように、Googleスタイルガイドは変数のドット表記を主張しているが、関数の大文字の混在は主張していることを指摘する必要があります。

Rパッケージ全体で一貫したスタイルがないことは、いくつかのレベルで問題があります。開発者の観点からすると、他のコードの保守と拡張が困難になります(特に、スタイルが自分のコードと一致しない場合)。Rユーザーの観点から見ると、一貫性のない構文は、概念の表現方法を増やすことで、Rの学習曲線を急勾配にします(たとえば、日付キャスト関数としてasDate()、as.date()、またはas_date()ですか?いいえ、そうです。日付())。


1
MATLABスタイルの事例もありalllowercase、変数名、ストレートから-式が非常に短い名前の多くは(xyなど)。
リッチーコットン

5
アンダースコアはpythonのようなものなので、アンダースコアを使用する傾向があります。ESSは修正する必要があります。これは本当にばかげています。
ブレンダンOConnor 09/12/24

7
修正する必要はありません。そのための切り替えがあります。ただし、デフォルトの動作では、下線を<-のショートカットとして解釈し、押すキーを節約します。したがって、アンダースコア付きの変数(Hi、Hadley)を公開する場合は、すべてのESSユーザーに_を2回押して、元の動作を取得するか、またはESSセットアップをカスタマイズします。私はまだ新しい海里でキャメルケースを好みます。
Dirk Eddelbuettel、2009

2
camelCaseにも問題があります。たとえば、標準のcamelケースImfDataTransformedや自然な拡張バージョンIMFDataTransformedは、私の好みのTOGGLEcamelCaseほど読みにくいですIMFdataTransformed。...
PatrickT

1
回答は意見に基づいているため、私はこの質問をトピック外として締めくくります。
Ben Bolker 16

回答:


81

以前の良い回答なので、ここに少しだけ追加します:

  • アンダースコアはESSユーザーにとって本当に煩わしいものです。ESSがかなり広く使用されていることを考えると、ESSユーザーが作成したコードには多くの下線が表示されません(そのセットには、R CoreとCRANの作成者が含まれますが、Hadleyなどの例外があります)。

  • ドットも単純なメソッドディスパッチで混同される可能性があるため、悪です。私はかつて、Rリストの1つでこの影響についてのコメントを読んだと思います。ドットは歴史的なアーティファクトであり、もはや推奨されていません。

  • つまり、最終ラウンドのキャメルケースにはまだ勝者が残っています。「Rコミュニティに先例がない」という主張に本当に同意するかどうかもわかりません。

そしてはい:実用主義と一貫性の切り札の教義。したがって、何が機能し、同僚や共著者によって使用されます。結局のところ、:)について議論するための空白と中括弧があります。


6
+1よく言った![コアチームのみが決定的なスタイルガイドを発行する場合。私はそれが彼らの既に暗示されている用法により多くの信憑性を与えるように感じます。]
シェーン

1
私は、自分の混合ケースへの偏見に基づいて、ただ覚えていなかったかもしれませんが、RGが彼のために働いていたときに、RGがいつもそれを使用していたと思います。私はRGにとって良いことは私にとって良いことだと考えています!
geoffjentry 2009

ジェフ::)に行くのは悪いルールではない
ダーク・エデルビュッテル2009

2
高く評価してくれてありがとう。「標準的なスタイルのドキュメント」に関しては、一緒に願うのはうまくいかないか、ピンクのポニーに乗っているでしょう。多分あなたは何かをオーサリングすることから始めることができます。それはR Wikiに固執することができ、私たちは皆それを編集し、採用し、遵守します。彼らが言うように、希望は永遠に湧き出る...
Dirk Eddelbuettel

1
@Dirk-私はあなたの推奨に基づいてラクダのケーシングに向かうことを計画していますが、?make.namesドット区切りの名前が好ましいと思われる理由を知っているかどうか知りたいですか?
David LeBauer、2011年

73

R Journalに受け入れられたCRANで実際に使用されている命名規則について調査しました:)結果をまとめたグラフを次に示します。

ここに画像の説明を入力してください

おそらく驚くことではありませんが、lowerCamelCaseが最も頻繁に関数名に使用され、period.separatedの名前がパラメーターに最も頻繁に使用されていることがわかります。ただし、GoogleのRスタイルガイドで推奨されているように、UpperCamelCaseを使用することは非常にまれであり、その命名規則を使用することを主張するのは少し奇妙です。

完全な論文はここにあります:

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


2
パーセンテージの合計が100%にならないのはなぜですか?
e9t 14年

10
@ e9t名前は多くのネーミングの要求に一致する可能性があるためです。printUpperCamelおよび.OTHER_styleを除くすべての規則に一致します。
RasmusBååth14年

このペーパーを更新していただければ幸いです。
サミュエルローザ

34

ずっとアンダースコア!世論に反して、ベースRにはアンダースコアを使用する多くの関数があります。grep("^[^\\.]*$", apropos("_"), value = T)それらをすべて表示するために実行します。

私は公式のハドレースタイルのコーディングを使用しています;)


1
すごい!以前は、apropos関数を知りませんでした。これにより、R 2.9.0では10個の関数が返されます。それが説得力のあるケースであるとはほとんど言えません。アンダースコアがRの少数派であることが明らかになったときのアンダースコアの根拠は何ですか?
シェーン、

3
R 2.10.0では16なので、バージョンごとに60%増加します;)Rubyを思い出させるので、私は主に気に入っています。camelCaseはJavaを思い出させます。
ハドリー2009

6
ハドリー、私の心はあなたのアンダースコアの反乱を支持すると言いますが、私の頭はコミュニティの基準を尊重し、キャメルケースに「はい」と言います。:(しかし、おそらく自己一貫性は、すべてのことの問題である。
medriscoll

5

ラクダが実際に意味のある何かを提供するとき、私はキャメルケースが好きです-データ型のような。

dfProfitLoss、ここでdf = dataframe

または

vdfMergedFiles()、関数はベクトルを取り、データフレームを吐き出します

_は本当に読みやすさを増すと思いますが、名前に.-_やその他の文字を使用すると、問題が多すぎるようです。特に、複数の言語で作業している場合。


3

これは個人の好みに帰着しますが、コアチームのスタイルと一貫しているため、Googleスタイルガイドに従います。ベースRの変数にアンダースコアが表示されていません。


3

ここで指摘したように:

識別子の冗長性はプログラマーのパフォーマンスにどのように影響しますか?

非ネイティブスピーカーである場合、同僚/ユーザーが変数名をどの程度理解できるかを覚えておくことは価値があります...

そのため、アンダースコアやピリオドは大文字よりも優れていると思いますが、指摘するように、スクリプトでは一貫性が不可欠です。


2

他の人が述べたように、アンダースコアは多くの人々を台無しにするでしょう。いいえ、それは禁止されていませんが、特に一般的でもありません。

ドットをセパレーターとして使用すると、S3クラスなどで少し厄介になります。

私の経験では、Rのマック度の高いマックの多くはキャメルケースの使用を好むようですが、ドットの使用法とアンダースコアの散在があります。


1

通常は、ixの下線と大文字の混合(camelCase)を使用して変数の名前を変更します。単純な変数は、下線を使用して名前を付けています。例:

PSOE_votes- > PSOE(スペインの政治グループ)の投票数。

PSOE_states- > Categorical、PSOEが勝利した状態を示します{アラゴン、アンダルシア、...)

PSOE_political_force- > Categorial、PSOEの政治グループ間の位置を示します(1番目、2番目、3番目)

PSOE_07- > 2007年のPSOE_votes + PSOE_states + PSOE_political_forceの連合(h eader-> votes、states、position

変数が1つまたは2つの変数に適用された関数の結果である場合、大文字と小文字を混在させて使用します。

例:

positionXstates <-xtabs(〜states + position、PSOE_07)


0

私はmixedCapitalsを好みます。

しかし、私はピリオドを使用して変数のタイプを示しています。

mixedCapitals.matは行列です。mixedCapitals.lmは線形モデルです。mixedCapitals.lstはリストオブジェクトです。

等々。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.