我正在尝试编写一个程序,该程序将表达式作为输入并返回一个以该表达式绑定为主体的函数。
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
)
我无法想出一种将表达式动态添加为主体的方法。我已经尝试使用替代(),并从 pryr 库中调整 make_function,但我不能完全让事情正常工作。我最好的尝试是
body(f, parent.frame()) <- as.list( match.call() )[-1]$body
我也无法让它与替代品一起使用。关于如何绑定身体以使最顶层的程序按预期工作的任何想法?
我在 SO 上看到过类似的问题,但解决方案似乎不能满足这个问题。