我在R中进行模拟研究.偶尔,我的模拟研究会产生错误信息.当我在函数中实现我的模拟研究时,模拟会在出现此错误消息时停止.我知道抑制错误是不好的做法,但此时对我来说除了抑制错误之外别无选择,然后继续下一次模拟直到我想运行的模拟总数.为此,我必须抑制R产生的错误消息.
为此,我尝试了不同的东西:
library(base64)
suppressWarnings
suppressMessages
options(error = expression(NULL))
Run Code Online (Sandbox Code Playgroud)
在前两个选项中,只有警告和消息被抑制,所以没有任何帮助.如果我理解正确,在最后一种情况下,应避免所有错误消息.但是,这没有帮助,该功能仍然会停止并显示错误消息.
有人知道为什么这不起作用我希望它的工作方式?我在互联网上搜索解决方案,但只能找到上述方法.在我运行模拟的函数中,外部程序JAGS(Gibbs采样器)分析了部分代码,并通过此分析生成错误消息.这可能是它出错的地方?
请注意,我不必压缩某个/特定的错误消息,因为没有产生其他错误消息,"足够好"有一个选项可以仅抑制所有错误消息.
感谢您的时间和帮助!
Meg*_*ron 12
正如之前的解决方案所建议的那样,您可以使用try或tryCatch函数来封装错误(更多信息在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)
抑制消息和抑制对错误的响应之间有很大的不同。如果某个函数无法完成其任务,则它必然会返回错误(尽管某些函数具有命令行参数,以便在出错时采取其他措施)。正如Zoonekynd所建议的,您需要使用try或trycatch“封装”该错误,以便即使该函数失败,您的主程序流程也可以继续。