我有一个包含许多参数的复杂函数。为了使代码更具可读性,我想我可以将检查输入的有效性转移到其他功能上。如下例所示:
complex_function <- function(a=NA, b=NA, c=NA, d=NA, e=NA, f=NA, g=NA, h=NA) {
check_inputs(a=a, b=b, c=c, d=d, e=e, f=f, g=g, h=h)
# ... rest of the function
}
check_inputs= function(a=NA, b=NA, c=NA, d=NA, e=NA, f=NA, g=NA, h=NA) {
if(is.na(a) & is.na(c)) {
stop("Not valid inputs - message 1")
} else if (is.na(h)) {
stop("Not valid inputs - message 2")
}
# long list of other controls
}
是否可以在未明确命名所有参数的情况下调用check_inputs
?像check_inputs(get_all_arguments_of_parrent_function)
这样的东西?有没有更好的方法来解决这个问题?
答案 0 :(得分:5)
也许这个小例子会有所帮助:
foo <- function(x,y){
foo_call <- as.list(match.call()[-1])
do.call(check_args,foo_call)
}
check_args <- function(x,y){
print(x)
print(y)
}
match.call
返回包含原始函数调用的语言对象。我删除了第一个元素,因为这是函数名称。其余元素是参数及其值。然后,我们可以使用其他函数do.call
将其传递给check_args
。