如何将警告和错误保存为函数的输出?
我正在使用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
守着星空守着你
随时随地看视频慕课网APP