創建一個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