R检查是否有任何遗漏的参数

时间:2016-08-04 03:45:33

标签: r function arguments optional

我有一个带有 MANY 参数的函数。如果缺少 ANY ,我需要抛出错误:

这可以这样做:

testFunction = function(a,b,c,d,e,f,g,....){
  if(missing(a)) stop("a is required")
  if(missing(b)) stop("b is required")
  if(missing(c)) stop("c is required")
  if(missing(d)) stop("d is required")
  if(missing(e)) stop("e is required")
  if(missing(f)) stop("f is required")
  if(missing(g)) stop("g is required")
}

但是我的实际案例包含的参数多于上述简单的例子,因此,我宁愿使用循环执行等效检查,如下所示:(它不起作用)

testFunction = function(a,b,c,d,e,f,g,...){
  args = as.list(environment())
  for(n in names(args)){
    if(missing(as.name(n))) stop(sprintf("%s is required",n))
  }
}

以上引发了错误:

  

Error in missing(as.name(n)) : invalid use of 'missing'

如何通过参数名称的字符表示来检查参数是否缺失?

1 个答案:

答案 0 :(得分:5)

这样的事情

f <- function(a,b,c,d) {
    defined <- ls()
    passed <- names(as.list(match.call())[-1])

    if (any(!defined %in% passed)) {
        stop(paste("missing values for", paste(setdiff(defined, passed), collapse=", ")))
    }
    a+b+c+d
}

它就像这样

f(1)
# Error in f(1) : missing values for b, c, d
f(2, d=3)
# Error in f(2, d = 3) : missing values for b, c
f(1,2,3,4)
# [1] 10

基本上我们使用ls()来获取当时函数中的变量列表(应该是所有参数),然后我们使用match.call()来查看实际传递给函数的内容。

相关问题