如果参数缺少值,如何可以访问函数的求值参数。
假设函数定义为。
foo <- function(...){
# function body
}
如果缺少某些参数,如何在其正文中访问参数?
如果没有缺失值,答案就是
foo <- function(...){
args <- list(...)
}
但如果我们进行foo(1,,3)
之类的调用,这将无效。
我能找到其他方式
foo <- function(...){
args <- as.list(match.call())[-1]
}
提供参数列表但不评估它们。例如,对于调用foo(rnorm(10), 1, 2)
,args将包含未评估的参数,我有时会对其进行评估。
有没有什么有意义的方法可以做到这一点?
UPD 我需要这个,因为我想编写一个包装函数来记录函数调用和返回值的参数。例如,
matrix_w <- function(...){
args <- list(...)
res <- matrix(...)
return(res)
}
如果是大多数通话都会有效,但是对于通话matrix_w(rnorm(20), , 2)
,它将无法处理args <- list(...)
中的参数,但matrix(rnorm(20), , 2)
可以正常工作。
答案 0 :(得分:1)
如果您希望对它们进行评估,您可能应该自己评估它们
matrix_w <- function(...){
args <- as.list(match.call())[-1]
eval.args <- lapply(args, function(x) tryCatch(eval(x), error=function(z) x))
do.call(matrix, eval.args)
}
matrix_w(rnorm(10), , 2)