R 中“掷”的等价物

如何在 R 中“抛出”一个错误?我有一个函数,它接受一个数据框架和一些列名,并对它们进行处理。如果列不存在,我希望函数停止,并根据它停止所有函数。

我已经看了 recoverbrowsetraceback,但是,好吧,他们似乎很接近,但不是我所寻找的。

88036 次浏览

help(tryCatch):

条件是由 除此之外,
stop’和‘ warning’函数具有 被修改为也接受
条件参数。

以及稍后的「请参阅」 :

stop’和‘ warning’信号条件,而‘ try’基本上是一个 简化版的「 tryCatch」。

所以你可能需要 stop

除了 Dirk 提到的基本函数:

Roo 包裹具有额外的异常处理功能,包括一个非常有用的 throw ()函数。可以使用常用的 try 或 trycatch 函数捕获异常:

> try(throw("Division by zero.")); print("It's ok!");
Error: [2009-10-22 10:24:07] Exception: Division by zero.
[1] "It's ok!"

你可以在这里了解更多: http://www1.maths.lth.se/help/R/R.oo/

举个简单的例子:

f <- function(a, b){


if (a == 0){
stop("error message")
}
}

实际上,函数 stopifnot非常便于在代码中实现健全性检查。它接受几个逻辑表达式,如果其中任何表达式的计算结果为 false,则返回一个错误。

例如: 检查数据框“ df”中是否存在列“ c”:

df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))

这将抛出以下错误:

Error: !is.null(df$c) is not TRUE

您可以检查该列是否存在并执行任何您想要的操作。
假设一个名为 df1data.frame并检查列 col1是否存在:

if(! any(grepl('^col1$',colnames(df1)))) stop("nonexistent column")

或者

if(! any(grepl('^col1$',colnames(df1)))) return(-1)

比如说