R中“throw”的等价

如何在R中“抛出”一个错误? 我有一个函数,它需要一个数据框和一些列名,并与他们做的东西。 如果列不存在,我希望函数停止并根据它停止所有的function。

我已经看过recoverbrowsetraceback但是,好吧,他们似乎是接近,但不是我所期待的。

查看help(tryCatch)

条件通过' signalCondition '信号signalCondition 。 除此之外
stop ”和“ warning ”function已被修改,以接受
条件参数。

稍后在“另请参见”下:

stop ”和“ warning ”信号条件,而“ try ”本质上是“ tryCatch ”的简化版本。

所以你可能要stop

简单的例子:

 f <- function(a, b){ if (a == 0){ stop("error message") } } 

除了德克提到的基本function之外,

R.oo包具有额外的exception处理function,包括一个非常有用的throw()函数。 您可以使用通常的try或trycatch函数来捕获exception:

 > 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/

其实函数stopifnot在你的代码中实现健全性检查非常方便。 它需要几个逻辑expression式,并返回一个错误,如果他们中的任何一个评估为false。

示例:检查dataframe“df”中是否存在列“c”:

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

这会抛出以下错误:

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

你可以检查列是否存在,并做任何你想要的。
假设一个名为df1的数据data.frame并检查列col1存在:

 if(! with(df1,exists("col1"))) stop("nonexistent column") 

要么

 if(with(df1,!exists("col1"))) return(-1) 

例如