R检查是否指定了参数:一般方法

时间:2013-09-03 14:44:55

标签: r

我想在我的R函数中包含检查是否已指定所有参数的一般方法。我可以通过使用missing()来做到这一点,但我不想指定参数名称。我想让它在任意函数内部工作。 更具体地说,我希望能够在没有更改它的任何函数中复制/粘贴此代码,它将检查是否指定了参数。 一个例子可以是以下功能:

tempf <- function(a,b){
argg <- as.list((environment()))
print(argg)
}

tempf(a=1, b=2)

1 个答案:

答案 0 :(得分:4)

尝试此功能:

missing_args <- function()
{
  calling_function <- sys.function(1)
  all_args <- names(formals(calling_function))
  matched_call <- match.call(
    calling_function, 
    sys.call(1), 
    expand.dots = FALSE
  )
  passed_args <- names(as.list(matched_call)[-1])
  setdiff(all_args, passed_args)
}

示例:

f <- function(a, b, ...)
{
  missing_args()
}

f() 
## [1] "a"   "b"   "..."
f(1) 
## [1] "b"   "..."
f(1, 2) 
## [1] "..."
f(b = 2) 
## [1] "a"   "..."
f(c = 3) 
## [1] "a" "b"
f(1, 2, 3)
## character(0)

如果您更倾向于函数抛出错误,请将最后一行更改为

  args_not_passed <- setdiff(all_args, passed_args)
  if(length(args_not_passed) > 0)
  {
    stop("The arguments ", toString(args_not_passed), " were not passed.")
  }