我想在我的 R 函数中包含一种通用方法来检查是否已指定所有参数。我可以通过使用 missing() 来做到这一点,但我不想指定参数名称。我想让它在任何任意函数中工作。更具体地说,我希望能够将此代码复制/粘贴到我拥有的任何函数中而不更改它,它将检查是否指定了参数。一个示例可能是以下函数:
tempf <- function(a,b){
argg <- as.list((environment()))
print(argg)
}
tempf(a=1, b=2)
我想在我的 R 函数中包含一种通用方法来检查是否已指定所有参数。我可以通过使用 missing() 来做到这一点,但我不想指定参数名称。我想让它在任何任意函数中工作。更具体地说,我希望能够将此代码复制/粘贴到我拥有的任何函数中而不更改它,它将检查是否指定了参数。一个示例可能是以下函数:
tempf <- function(a,b){
argg <- as.list((environment()))
print(argg)
}
tempf(a=1, b=2)
试试这个功能:
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.")
}