式を入力として受け取り、その式が本体としてバインドされた関数を返すプログラムを作成しようとしています。
caller <- function (expr, params) {
Function <- function (params, body, env = parent.frame()) {
# returns a function
}
Function(params, body = expr)
}
func <- caller (a + b, c('a', 'b'))
func(1, 2)
[1] 3
次のようなものを使用して、パラメーターを非常に簡単にバインドできます
params <- c('a', 'b')
f <- function() {}
formals(f) <- structure(
replicate(length(params), NULL),
names = params
)
式を本体として動的に追加する方法を考え出すのに苦労しています。私はsubstitute()を使用して、pryrライブラリからmake_functionを適応させようとしましたが、うまく動作しません。私の最善の試みは
body(f, parent.frame()) <- as.list( match.call() )[-1]$body
これも代用で動作させることができませんでした。最上位のプログラムが期待どおりに動作するようにボディをバインドする方法について何か考えはありますか?
SOで同様の質問を見たことがありますが、解決策はこの問題を満足していないようです。