(R)IF声明:停止&警告如果否则继续

时间:2014-08-24 23:36:37

标签: r unit-testing

我正在制作一个功能,在它执行任何困难的工作之前,我需要它来检查“'样本”中列出的所有列名称。数据集也存在于“网格”中。数据集(函数将一个映射到另一个)。

all(names(samples[expvar]) %in% names(grids))

这样做:all()中的代码询问“'样本”列中列的所有名称(' expvar')也是'网格中的名字。正确length=3expvar的输出为TRUE TRUE TRUE。 '所有'询问是否所有都为TRUE,因此此处的输出为TRUE。我想按以下方式做出IF声明:

if(all(names(samples[expvar]) %in% names(grids)) = FALSE) {stop("Not all expvar column names found as column names in grids")}

没有别的需要,它只会继续。问题是' = FALSE'是多余的,因为all()是一个逻辑上可评估的陈述......是否有"继续"功能,例如

if(all(etc)) CARRYON else {stop("warning")}

或者,任何人都可以想到一种方法我可以重组它以使其有效吗?

2 个答案:

答案 0 :(得分:4)

您正在寻找功能stopifnot

但是您不需要将其实现为

if (okay) {
  # do stuff
} else {
  stop()
}

这就是你拥有的。相反,你可以做

if (!okay) {
  stop()
}
# do stuff

因为这些行将按顺序执行。但是,再次使用stopifnot可能更具可读性,如:

stopifnot(okay)
# do stuff

答案 1 :(得分:1)

我会编码:

if(!all(...))
    stop(...)
... rest of program ...