在R中抑制错误消息

Ing*_*nga 14 error-handling r

我在R中进行模拟研究.偶尔,我的模拟研究会产生错误信息.当我在函数中实现我的模拟研究时,模拟会在出现此错误消息时停止.我知道抑制错误是不好的做法,但此时对我来说除了抑制错误之外别无选择,然后继续下一次模拟直到我想运行的模拟总数.为此,我必须抑制R产生的错误消息.

为此,我尝试了不同的东西:

library(base64)
suppressWarnings
suppressMessages
options(error = expression(NULL))
Run Code Online (Sandbox Code Playgroud)

在前两个选项中,只有警告和消息被抑制,所以没有任何帮助.如果我理解正确,在最后一种情况下,应避免所有错误消息.但是,这没有帮助,该功能仍然会停止并显示错误消息.

有人知道为什么这不起作用我希望它的工作方式?我在互联网上搜索解决方案,但只能找到上述方法.在我运行模拟的函数中,外部程序JAGS(Gibbs采样器)分析了部分代码,并通过此分析生成错误消息.这可能是它出错的地方?

请注意,我不必压缩某个/特定的错误消息,因为没有产生其他错误消息,"足够好"有一个选项可以仅抑制所有错误消息.

感谢您的时间和帮助!

Meg*_*ron 12

正如之前的解决方案所建议的那样,您可以使用trytryCatch函数来封装错误(更多信息在Advanced R 中)。但是,stderr默认情况下,它们不会抑制错误报告消息。

这可以通过设置它们的参数来实现。对于try,设置silent=TRUE。对于tryCatch设置error=function(e){}

例子:

o <- try(1 + "a")
>  Error in 1 + "a" : non-numeric argument to binary operator
o <- try(1 + "a", silent=TRUE)  # no error printed

o <- tryCatch(1 + "a")
> Error in 1 + "a" : non-numeric argument to binary operator
o <- tryCatch(1 + "a", error=function(e){})
Run Code Online (Sandbox Code Playgroud)


Car*_*oft 5

抑制消息和抑制对错误的响应之间有很大的不同。如果某个函数无法完成其任务,则它必然会返回错误(尽管某些函数具有命令行参数,以便在出错时采取其他措施)。正如Zoonekynd所建议的,您需要使用trytrycatch“封装”该错误,以便即使该函数失败,您的主程序流程也可以继续。

  • @Carl Witthoft:就我而言,我将错误打印到屏幕上,但一切正常(是的,确实是一种很奇怪的情况)。我能以某种方式抑制这些错误吗,类似于我如何用`options(warn = -1)`抑制警告?我希望有一个 `options(err = -1)` 命令或类似的东西!这将有助于抑制 *message* 但不一定是响应。**注意:** `options(error = expression(NULL))` 和 `suppressMessages` 都不适合我。 (2认同)