创建一个R函数编程方式从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
从字符串中构建一个新的alist,但这意味着我不能有作为参数。
你尝试过'missing(y)'吗?以测试呼叫中是否存在“y”。 –
问题在于调用之前,构造新函数的形式。 – dspringate