相关疑难解决方法(0)

R中的异常处理

有没有人在R中有异常处理的示例/教程?官方文档非常简洁.

exception-handling r

98
推荐指数
5
解决办法
7万
查看次数

在tryCatch中警告之前处理错误

我正在处理一个抛出错误和警告的函数. (相关:关于警告的警告)

通常,警告会发生错误.在这些情况下,我想忽略警告并仅处理错误.

另一方面,如果只有一个警告(没有错误),那么我想抓住警告.

我试图使用臭名昭着的易用tryCatch.

我当前的问题是:有没有办法强制tryCatcherrors之前处理warnings(或在出现错误时忽略警告)?

我从?tryCatch文档中得到的理解是条件处理FIFO,在这种情况下,我的直接问题的答案是否 - 至少不是直接的.在这种情况下,是否可以处理警告,然后在仍然捕获错误的同时继续执行该功能?

解决方案不适用于我:

  • suppressWarnings #我还想抓住并处理警告
  • options(warn=2) #某些警告是无害的
     relevant from `?tryCatch`
Run Code Online (Sandbox Code Playgroud)

如果在评估expr时发出条件信号,那么从最近建立的处理程序开始检查已建立的处理程序,以匹配条件的类.当在一个tryCatch中提供多个处理程序时,第一个被认为比第二个更新.如果找到一个处理程序,则控制转移到建立处理程序的tryCatch调用,找到处理程序并解除所有更新的处理程序,以条件作为其参数调用处理程序,并且处理程序返回的结果返回为tryCatch调用的值.

以下是玩具示例:

F.errorAndWarning <- function() {
    warning("Warning before the error")
    cat("I have moved on.")
    stop("error")
    TRUE
}
F.error <- function() {stop("error"); TRUE}


test <- function(F)
  tryCatch(expr= {F}()
          , error=function(e)   cat("ERROR CAUGHT")
          , warning=function(w) cat("WARNING CAUGHT")
          )

test(F.error)
# ERROR CAUGHT
test(F.errorAndWarning)
# WARNING CAUGHT
Run Code Online (Sandbox Code Playgroud)

预期/理想输出:

test(F.errorAndWarning)
# ERROR CAUGHT
Run Code Online (Sandbox Code Playgroud)

exception-handling r try-catch

10
推荐指数
2
解决办法
2412
查看次数

如何使用控制台输出捕获警告?

我正在尝试捕获 R 脚本的完整控制台日志。我想要所有事情的时间顺序,在它们发生时打印警告。我试过这个:

options(warn = 1)

tmpSinkfileName <- tempfile()
sink(tmpSinkfileName, split = TRUE)

cat("Doing something\n")
warning("Hi here")
cat("Doing something else\n")
warning("Hi there")

sink()
console.out <- readChar(tmpSinkfileName, file.info(tmpSinkfileName)$size)
unlink(tmpSinkfileName)

cat(console.out)
# Doing something
# Doing something else
warnings()
# NULL
Run Code Online (Sandbox Code Playgroud)

但不幸的是警告在console.out. 我怎样才能做到这一点?根据文档,options(warn = 1)应该在警告发生时打印警告。不幸的是,他们没有被sink().

r

3
推荐指数
1
解决办法
1698
查看次数

标签 统计

r ×3

exception-handling ×2

try-catch ×1