继从如何以编程方式创建 R 函数? https://stackoverflow.com/questions/12982528/how-to-create-an-r-function-programmatically
我想从它们的组件构建 R 函数,如下所示:
testfn <- function(..., expression){
args <- substitute(alist(...))
body <- substitute(expression)
eval(call("function", as.pairlist(eval(args)), body), parent.frame())
}
如果有默认值,这可以正常工作:
testfn(x = 4, y = 5, expression = {
y <- y + 2
x + y
})
=>
function (x = 4, y = 5)
{
y <- y + 2
x + y
}
但如果一个或多个参数没有默认参数,它将不起作用:
testfn(x = 4, y, expression = {
y <- y + 2
x + y
})
=>
Error in eval(expr, envir, enclos) :
invalid formal argument list for "function"
我可以把=
在 arg 列表中使其正常工作:
testfn(x = 4, y = , expression = {
y <- y + 2
x + y
})
=>
function (x = 4, y)
{
y <- y + 2
x + y
}
但我不想在函数参数中强制执行这一点。我尝试过编辑函数中的 alist,但是当我这样做时,我收到另一个无效的形式参数列表错误:
testfn2 <- function(..., expression){
args <- substitute(alist(...))
body <- substitute(expression)
for (arg in 2:length(args)){
if(names(myargs)[arg] == ""){
args[[arg]] <- as.name(paste(as.character(args)[arg], "="))
}
}
eval(call("function", as.pairlist(eval(args)), body), parent.frame())
}
testfn2(x = 4, y, expression = {
y <- y + 2
x + y
})
=>
Error in eval(expr, envir, enclos) :
invalid formal argument list for "function"
如何更改此设置以便可以在缺少参数默认值的情况下调用 testfn() ?我想用字符串构造一个新的列表parse
但这意味着我不能拥有例如函数作为参数。