题
如何“抛出” R中的错误?我有一个函数,它采用数据框和一些列名称,并用它们做的事情。如果列不存在,我希望函数停止并根据它停止所有函数。
我已经看过 recover
和 browse
和 traceback
但是,好吧,它们似乎很接近但不是我想要的。
解决方案
参见 help(tryCatch)
:
条件由发出信号 '<代码> signalCondition 代码>'。另外,
'stop
'和'warning
'函数有 被修改为也接受
条件参数。
以及稍后在“另请参阅”下:
'
stop
'和'warning
'信号条件,'try
'基本上是一个 简化版的'tryCatch
'。
所以你可能想要 stop
。
其他提示
简单示例:
f <- function(a, b){
if (a == 0){
stop("error message")
}
}
除了Dirk提到的基本功能之外:
R.oo包还有其他例外情况处理功能,包括一个非常有用的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 /帮助/ R / R.oo /
实际上,函数 stopifnot
非常便于在代码中实现健全性检查。它接受几个逻辑表达式,如果其中任何一个计算结果为false,则返回错误。
实施例: 检查数据框'df'中是否存在列'c':
df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))
这会抛出以下错误:
Error: !is.null(df$c) is not TRUE
您可以检查列是否存在并执行任何操作。
假设 data.frame
命名为 df1
并检查列 col1
是否存在:
if(! any(grepl('^col1
或
if(! any(grepl('^col1
例如
,colnames(df1)))) stop("nonexistent column")
或
<*>
例如
,colnames(df1)))) return(-1)
例如
,colnames(df1)))) stop("nonexistent column")或
<*>例如
不隶属于 StackOverflow