dplyrは言語です

awesomeな方がJapan.RでLTされていたので、アンサーソング的なブログを書いておきます。(嘘です。そんなにdplyr詳しくないです...)

dplyrは言語なのか

結論から言えば、dplyrは言語です。

何を根拠にそんな、と思うかもしれませんが、みんなあんまり気づいてませんけどdplyrのDESCRIPTIONには「データ操作の文法だ」と、ばっちり書いてあります。

Title: A Grammar of Data Manipulation
(https://cran.r-project.org/package=dplyr)

Introduction to dplyrというvignetteにも、select()mutate()などは「verb」(動詞)であり、dplyrは「a language of data manipulation」(データ操作の言語)であることがそれとなく表明されています。

The dplyr package makes these steps fast and easy:
...snip...

  • It provides simple “verbs”, functions that correspond to the most common data manipulation tasks, to help you translate those thoughts into code.

These five functions provide the basis of a language of data manipulation.

ちなみにこのvignetteは以下で訳しているので興味ある方はご参照ください(宣伝)。

どうやってSQLに翻訳されているのか

dplyrは、SQLに翻訳する際に、基本的に共通の処理を行い、バックエンド固有のメソッドがある場合にはそれを使います。PostgreSQLの場合は具体的にはこのあたりみたいです。

dplyr/src-postgres.r at 6153e136fa9397e88478fa6270d9d1f02eb5153e · hadley/dplyr · GitHub

さっぱりわかりませんが、db_select.PostgreSQLConnectionみたいな感じのメソッドはないので、PostgreSQLでSELECTするときに特殊な処理を行ってはいなさそうです。サブクエリを多用するのはデフォルトがイケてないということだと思います。たぶん。

参考までに、sparklyrの実装を見ると、いろいろがんばってる感があるので、PostgreSQLをわかるひとが変換部分をちゃんと書けばなんとかなるのかもしれません。

sparklyr/dplyr_spark_connection.R at 00ae2a870be0b3934a8a80f84127ac7237b2d50b · rstudio/sparklyr · GitHub

このへんちゃんと追いたいけど私ではカラテが足りず...。すみません。