R中“throw”的等价
如何在R中“抛出”一个错误? 我有一个函数,它需要一个数据框和一些列名,并与他们做的东西。 如果列不存在,我希望函数停止并根据它停止所有的function。
我已经看过recover
和browse
和traceback
但是,好吧,他们似乎是接近,但不是我所期待的。
查看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)
例如