检查另一个功能中的功能输入 - 传递所有参数

时间:2013-12-11 20:44:12

标签: r

我有一个包含许多参数的复杂函数。为了使代码更具可读性,我想我可以将检查输入的有效性转移到其他功能上。如下例所示:

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)这样的东西?有没有更好的方法来解决这个问题?

1 个答案:

答案 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