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