如何将警告和错误保存为函数的输出?
我正在使用lapply
在大量项目上运行复杂的函数,我想将每个项目的输出(如果有的话)与所产生的任何警告/错误一起保存,以便我可以告诉哪个项目产生哪个警告/错误。
我找到了一种方法来捕捉警告withCallingHandlers
(在此描述)。但是,我也需要捕获错误。我可以将它包装在一个tryCatch
(如下面的代码中),但是有更好的方法吗?
catchToList <- function(expr) { val <- NULL myWarnings <- NULL wHandler <- function(w) { myWarnings <<- c(myWarnings, w$message) invokeRestart("muffleWarning") } myError <- NULL eHandler <- function(e) { myError <<- e$message NULL } val <- tryCatch(withCallingHandlers(expr, warning = wHandler), error = eHandler) list(value = val, warnings = myWarnings, error=myError)}
此函数的示例输出是:
> catchToList({warning("warning 1");warning("warning 2");1})$value[1] 1$warnings[1] "warning 1" "warning 2"$errorNULL> catchToList({warning("my warning");stop("my error")})$valueNULL$warnings[1] "my warning"$error[1] "my error"
有只小跳蛙
ITMISS
守着星空守着你