在R中,我写了一个函数:
fun <- function(A, B, C, D) {}
所以,在这个函数的开头,我必须进行参数检查:
但是关于这些论点,有些是必需的,有些则不是,每个参数的类(数据类型)必须是我想要的,例如:数字 ,逻辑,依此类推......
为了做到这一点,我做了以下事情:
if(A Follow_the_rule){}
if(B Follow_the_rule){}
if(C Follow_the_rule){}
...
关于上面的代码,需要这么多 if 语句,我认为这不是参数检查的最佳方式。
那么有没有更好的方法来检查R中的参数?
任何帮助将不胜感激。
答案 0 :(得分:1)
看一下?stopifnot
哪个符合您的要求。它会检查条件并在没有给出条件时停止。与if
中的相同,您可以将条件与&&
或||
和&
amd |
连接起来。查看信息,例如?"&"
。进一步有用也可以是all
或any
来检查给定向量的所有元素是否分别满足条件或任何条件。一些例子:
foo <- function(A, B, C){
stopifnot(!missing(C), !missing(B), !missing(A)) ##A, B, C not missing, then continue
stopifnot(class(B)=="matrix") ## B is a matrix, then continue
stopifnot(class(B)==class(C), all(B > C)) ## class B is class C and all elements of B are greater than C
stopifnot((length(A)>1 && !any(is.na(A))) || all(A==0)) ## (A has more than 1 element and no element is NA) or all elements of A are 0.
stopifnot(all(A > 2), all(A < 10)) ## all elements of A are between 2 and 10, else stop.
#... further code
}
上述条件可能不适合这种组合,但我认为有足够的例子可以适应您的问题。当然,您可以在一个stopifnot
中编写所有内容,但如果有多个条件,则对条件进行分组会更有用,因为停止该函数的条件将打印为错误代码。因此,您拥有的stopifnot
越多,您获得的错误信息就越精确。