如何在R中抑制tryCatch捕获错误后转换的消息?
解决办法
方法1:用capture.output()捕获消息
suppressMessages()仅对message()函数生成的输出生效,若第三方包通过print()、cat()等其他方式输出内容,或者消息在特殊执行上下文里,就会失效。capture.output()可以强制捕获所有消息类输出,避免显示在控制台:
capture.output(CallDumb(), type = "message")
方法2:临时重定向消息到空设备
通过sink()将消息输出临时导向空设备,执行目标函数后再恢复正常输出:
# 重定向消息输出到空设备 sink(nullfile(), type = "message") CallDumb() # 恢复消息输出到控制台 sink(type = "message")
方法3:用purrr::quietly()包装函数
purrr包的quietly()工具会包装目标函数,自动捕获所有消息、警告和控制台输出,执行时不会显示任何内容,还能返回函数结果及捕获的输出信息:
library(purrr) # 包装目标函数 quiet_call <- quietly(CallDumb) # 执行包装后的函数,无消息输出 quiet_call()
补充说明
你的示例代码中,suppressMessages()理论上可以压住message(cond)的输出,但如果实际场景里第三方包的消息不是通过message()函数生成的(比如直接用print(cond)输出错误信息),suppressMessages()就会失效,这时候上面的方法会更可靠。
内容的提问来源于stack exchange,提问作者user1658170
相关产品推荐
相关产品推荐

