R 界隈で NSE の話題が持ち上がっているようで。
このタイミングで、NSE を使って pipeR ワールドを作るという超どうでもいい話をします。
pipeR を知らないという方はこちらをご一読ください。
さて、pipeR でフツーにコードを書くと、こんなコードが出来上がりますね。
R
library(pipeR)
cars %>>%
(~ plot(dist ~ speed, data=.)) %>>%
(lm(dist ~ speed, data=.)) %>>%
abline(col="red")
pipeR の最大の弱点とは何でしょうか?
そう、それは可読せ %>>%
演算子を書くのが面倒くさいということですね。
そこで、NSE を使って次のような関数を用意します。
R
pipeR_world <- function(expr) {
require(pipeR)
expr <- substitute(expr)
n <- length(expr)
pipeExpr <- ""
for(i in seq_len(n)) {
e <- deparse(expr[i])
if(length(e) == 1) {
str <- substr(e, 1, nchar(e)-2)
pipeExpr <- paste(pipeExpr, str)
if(i != n) {
pipeExpr <- paste(pipeExpr, "%>>%")
}
}
}
eval(parse(text=pipeExpr), envir = parent.frame())
}
この関数を使えば、先ほどのコードは次のように書くことができます。
R
pipeR_world({
cars
(~ plot(dist ~ speed, data=.))
(lm(dist ~ speed, data=.))
abline(col="red")
})
なんと、パイプ %>>%
を全く書かなくても済むようになりました!
pipeR_world()
関数によって、pipeR の世界が作られたのです。
この世界では、人々はパイプから解放されます。
pipeR には、本当はパイプなんて必要なかったんやー。
この世界でプログラミングすると、普通の R プログラミングと全く異なる次元の体験ができるのでお勧めです。
みなさんもぜひ pipeR_world の一員になりましょう!
enjoy!
追記
本家へ取り込まれました