メモ: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

NULLc()が勝手に消してしまう。

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
#> }