メモ:JavaScriptのallow functionみたいなやつをRでもやりたかったけどむずそう
rlang::new_function()
を参考にしてこんな感じ?と思ったけど、
`%=>%` <- function(args, body) { args <- as.pairlist(args) body <- substitute(body) call("function", args, body) }
デフォルト引数があるとうまくいくけど、
c(x = 0) %=>% {x + 1} #> function(x = 0) { #> x + 1 #> }
これはx
は名前じゃなくて値だとみなされるのでエラーになるし、
c(x) %=>% {x + 1} #> Error in as.pairlist(args) : object 'x' not found
NULL
はc()
が勝手に消してしまう。
c(x = NULL) %=>% {x + 1} #> function() { #> x + 1 #> }
もっと黒魔術的なことをすればいける? とりあえず今回はギブアップ。
あと、function
を普通の文法じゃなくて関数として呼び出すときのやり方がよく分からなかった。
args <- as.pairlist(c(x = 1)) body <- quote({x + 1}) `function`(args, body) #> Error: invalid formal argument list for "function" call("function", args, body) #> function(x = 1) { #> x + 1 #> }