NSE(Non-Standard Evaluation)について

NSEについて前回の記事で叫んだところ、kohskeさんが解説記事を書いてくれた。素敵!
http://qiita.com/kohske/items/7dbef6ae3ff34c093ce4
NSEの説明についてはこの記事で十分なのだが、なぜ今さらNSEなんてものをHadleyが持ち出してきたのかについて彼の資料を参考に推測していきたい。

Rにおける従来のNSE

上記kohskeさんの記事にあるようにRではNSEが多用されてきた。
「Standard nonstandard evaluation rules」というRの開発ドキュメントもある。
http://developer.r-project.org/nonstandard-eval.pdf
これだけ普及しているのだから今さらとりたてて言う話でもないように思える。

なぜ今さらNSEについて言及するのか

ではなぜ今さらdplyrの作者であるHadley WickhamはNSEについて言及するのか。
この理由は以下の資料の冒頭に書いてある。
http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html
抜粋すると

NSE is important not only to save you typing, but for database backends, is what makes it possible to translate your R code to SQL. However, while NSE is great for interactive use it’s hard to program with. This vignette describes how you can opt out of NSE in dplyr, and instead rely only on SE (along with a little quoting).

NSEはインタラクティブにデータをいじる時には便利だけどプログラミング(インタラクティブの対義語的なイメージ)する時には色々困るので、そういうときはSEを使おうぜ、ということらしい。
同氏のAdvance RのNSEの項を併せて読むと、従来のRの関数、たとえばlibraryとかはSEもNSEも受け付けているので混乱を招いておりこれは良くないと暗に主張している。
http://adv-r.had.co.nz/Computing-on-the-language.html
library関数等はパラメータ(character.only=TRUE)でSEだけに縛ったりはできるようだけど、これは関数の作りとして良くないので、NSEとSEで関数を分けてしまおう、と彼は考えているようだ。
結果として、彼はdplyrパッケージにおいてsummarise(NSE版)とsummarise_(SE版)といった形で関数を分けて用意している。
また従来のNSEの実装にも不満があるようで彼はlazyevalパッケージという形でNSEを再実装している(詳細については下記のlazyevalのvignetteを参照のこと)。
http://cran.r-project.org/web/packages/lazyeval/vignettes/lazyeval.html

これを知ってどうだというのか

パッケージユーザーであり、特に開発にも関わらない私のような人間がこれを知ってどうなのかという疑問は当然ある。
これについては「好奇心」という回答以上に、今後この流れが既定路線になるんじゃないかという懸念がある。
HadleyはアンダーバーがなければNSE、あればSEという形で関数を命名している。
今後、この考え方が広まれば、アンダーバーの有無でSEとNSEそれぞれの関数が用意されるパッケージ、場合によってはRの組み込み関数が出てくる可能性は万が一にもある(ないだろーとか思ってる人が多いと思うが、そんな人にはHadley Wickhamは最近Rの開発コアメンバーに入ったことをお知らせしておきたい)。
ヘルプ見ればいいじゃんという向きもあるかもしれないが、彼(Hadley)はヘルプ等でそういった説明を省いたり、exampleに使い分けを書かなかったりすることがある。少なくとも私はtidyrパッケージのヘルプで大した説明もなくgather関数とgather_関数があるのを見てその違いがわからなかった。
なお、当然だが今のところ彼以外の作者はこのアンダーバー命名規則に従っていないので関数の後ろにアンダーバーがある関数をみてもすぐにSEだと思わないように注意されたい(例えば、先日紹介したKmiscパッケージのtapply_関数は作者及び作られた時期から言ってこの命名規則に従っているわけではない)。

参考資料

NSEについては「lattice」(日本語版は「Rグラフィックス自由自在」)でも10.1にNonstandard evaluation(日本語だと「非標準評価」)として紹介されている。
http://books.google.co.jp/books?id=gXxKFWkE9h0C&pg=PA164&lpg=PA164&dq=latticce+non-standard-evaluation&source=bl&ots=HKr_FgP5wm&sig=oDyF2DDU1IcEeLB2_pkyy2xnxLg&hl=ja&sa=X&ei=WhFgVKz2EobimAWfuIGYCg&ved=0CCoQ6AEwAQ#v=onepage&q=latticce%20non-standard-evaluation&f=false