R中的参数检查

时间:2016-09-09 03:24:14

标签: r parameter-passing

在R中,我写了一个函数:

fun <- function(A, B, C, D) {}

所以,在这个函数的开头,我必须进行参数检查:

  • 缺少一些必需的参数
  • 所有参数都遵守规则:类(数据类型) A必须在范围[1:3]

但是关于这些论点,有些是必需的,有些则不是,每个参数的类(数据类型)必须是我想要的,例如:数字逻辑,依此类推......

为了做到这一点,我做了以下事情:

if(A Follow_the_rule){}
if(B Follow_the_rule){}
if(C Follow_the_rule){}
...

关于上面的代码,需要这么多 if 语句,我认为这不是参数检查的最佳方式。

那么有没有更好的方法来检查R中的参数?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

看一下?stopifnot哪个符合您的要求。它会检查条件并在没有给出条件时停止。与if中的相同,您可以将条件与&&||& amd |连接起来。查看信息,例如?"&"。进一步有用也可以是allany来检查给定向量的所有元素是否分别满足条件或任何条件。一些例子:

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越多,您获得的错误信息就越精确。