Nic*_*ton 6 arguments r function optional
我有一个带有许多参数的函数.如果缺少任何错误,我需要抛出错误:
这可以这样做:
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")
}
Run Code Online (Sandbox Code Playgroud)
但是我的实际案例包含的参数多于上面的简单示例,因此,我宁愿使用循环执行等效检查,如下所示:(这不起作用)
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))
}
}
Run Code Online (Sandbox Code Playgroud)
上面抛出一个错误:
Error in missing(as.name(n)) : invalid use of 'missing'
如何通过参数名称的字符表示检查参数是否缺失?
相反,这样的事情怎么样
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
}
Run Code Online (Sandbox Code Playgroud)
它就是这样的
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
Run Code Online (Sandbox Code Playgroud)
基本上我们ls()用来获取当时函数中的变量列表(应该是所有参数)然后我们match.call()用来查看实际传递给函数的内容.