R语言中tryCatch无法抑制错误信息,如何让函数报错仅返回NULL?
原因说明
fitdist函数出错时会主动向控制台打印提示内容,这部分内容不属于R标准错误条件,仅配置error回调的tryCatch无法拦截,因此会出现返回NULL但仍打印错误信息的情况。
最简实现
使用try函数的silent参数即可一键压制所有运行时的报错输出,再对结果做判断返回对应值即可:
fit_fn <- function(x){ run_res <- try(fitdist(x, "exp"), silent = TRUE) # 运行出错则返回NULL,否则返回拟合结果 if (inherits(run_res, "try-error")) return(NULL) return(run_res) }
调用fit_fn(vec)测试时,不会输出任何错误信息,仅返回NULL。
进阶实现(基于原tryCatch写法修改)
如果要沿用你原来的tryCatch写法,可以搭配capture.output拦截所有内部打印的消息:
fit_fn <- function(x){ # 捕获所有消息类输出,不输出到控制台 capture.output( res <- tryCatch(fitdist(x, "exp"), error = function(e) NULL), type = "message" ) return(res) }
如果需要同时压制运行过程中的警告信息,可以在fitdist外层加suppressWarnings:
fit_fn <- function(x){ capture.output( res <- tryCatch(suppressWarnings(fitdist(x, "exp")), error = function(e) NULL), type = "message" ) return(res) }
内容的提问来源于stack exchange,提问作者mharinga
相关产品推荐
相关产品推荐

