如何“抛出” 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")

<*>

例如

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top