我有一个简单的函数,用于检查两个提供的参数是否为字符,如果不是,则抛出错误
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
check_args_are_chr("one", 2)
> Error in value[[3L]](cond) : Arguments must be supplied as characters
但是,arg2是一个可选参数,并不总是传递给函数。 NULL也是一个可接受的值
我想将其合并,因此传递给stopifnot
的expr为
is.character(arg2) && is.null(arg2)
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2) && is.null(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
但这仍然使tryCatch引发异常。如何修改此设置,使可接受的类为character
或NULL
答案 0 :(得分:1)
首先,您的代码无法正常工作,因为您将(二进制)或 ||
与和 &&
第二,以这种方式使用tryCatch实际上没有意义。只需执行if (...) stop("Arguments must be supplied as characters")
。不利的一面是,if
语句比使用tryCatch
更为笨拙,但不那么笨拙。
答案 1 :(得分:0)
使用missing
来检查是否提供了arg2
:
(missing(arg2) || (is.null(arg2) || is.character(arg2)))
或设置默认值arg2 = NULL