読者です 読者をやめる 読者になる 読者になる

Rの変数名についての議論まとめ(ライト版)

R

天下のHadleyさんとGoogle先生で言ってることが違う!
という話があったので、軽くまとめてみます。
(あんまガチな話はついていけないので、ほんと軽くです)

参考文献

元ネタ

歴史的経緯の話

とりあえず比較してみる

Camel Case

rStyle

みたいなやつです。 これについての評価はそれぞれ以下のような感じです。

Hadleyさん

  • これは「Bad」
  • 変数名も関数名も小文字にしよう!

Googleのスタイルガイド

  • まあ「OK」
  • でもキャメルケースは関数用だよ!

ということで、まあ避けれるなら避けた方がいい?という感じ。

Snake Case

r_style

これは評価が分かれます。

Hadleyさん

  • 「Good」!

Googleのスタイルガイド

  • 「Bad」!

むむむ、どちらを信じればよいのでしょう。。

Googleが「_」をダメと言ってる理由の推測は後述します。 ひとまず、次。

ドットつなぎ

r.style

Googleはこれを勧めてますが、、

Hadleyさん

  • (コメントすらしていない)

Googleのスタイルガイド

  • 「Good」!

うむむ。 Hadleyさんの沈黙の真相は?

ここまでのまとめ

HadleyさんもGoogleさんも「Good」だと合意している書き方はない、という衝撃の事実が判明しました。ひえー!

これについて、知識のない私ながら思ったことをいちおう書いてみます。

Snake Caseがだめだ、と思い込む人がいる理由

これは多分、歴史的経緯によります。
私も先日知ったのですが、過去Rでは、_<-(代入)の意味を持っていた時代があったそうです。

You can put underscores in names

It used to be that _ was a shortcut for <-. (That was always a bad idea. And it led me to use dots in function names, like calc.genoprob, which has been problematic due to the S3 class system.)

Then they started allowing = in place of <-.

And then they got rid of _ as a shortcut for <-. Good idea, and now we can have functions named like calc_genoprob.

(出典:hipsteR)

あ、「Snake Caseがだめだ、と思い込む人がいる理由」だけではなくて、
「ドットつなぎがいいと思い込む人がいる理由」も書いてますね。

ドットつなぎがだめな理由

上の引用に書いてあるように、S3オブジェクトの仕組みとぶつかるからです。
S3オブジェクトとはなにか、についての解説は私には荷が重すぎるので、 ↓でも読んでください。

OO field guide · Advanced R.

(…と思ったらいちおうこのブログにちらっと書いてました。興味ある方はどうぞ。
data.frameを拡張するには 失敗編(S3でゆるふわ) - Technically, technophobic.

S3の仕組みで、.は関数が所属?するクラスを指定する意味を持っています。
ドットを変数名(特に関数名)に使うことで、予想外の動作を引き起こす可能性があります。

むしろGoogleはなんでこれを進めてるのか理解できない。。

結論

  • Hadley信者は迷わずスネークケースで!
  • それ以外の人は、キャメルケースでもいいけど、とりあえずドットつなぎはやめときましょう!