我正在制作一个功能,在它执行任何困难的工作之前,我需要它来检查“'样本”中列出的所有列名称。数据集也存在于“网格”中。数据集(函数将一个映射到另一个)。
all(names(samples[expvar]) %in% names(grids))
这样做:all()中的代码询问“'样本”列中列的所有名称(' expvar')也是'网格中的名字。正确length=3
,expvar
的输出为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")}
或者,任何人都可以想到一种方法我可以重组它以使其有效吗?
答案 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 ...