【发布时间】:2019-12-31 08:34:20
【问题描述】:
我有一个函数fun,它经常产生警告并偶尔抛出错误。我正在尝试使用tryCatch 来记录警告和错误,正如this answer 中所建议的那样。如何同时存储警告和错误?
这是一个最小设置:
# Function for warnings, errors.
fun <- function(i) {
# Print warnings as they come in.
options(warn = 1)
# Issue warning.
warning(paste("Warn.", i))
# Stop.
if(i == 3) { stop(paste("Err.", i)) }
# Restore warning default behaviour.
options(warn = 0)
}
用tryCatch评估fun:
# Storage
warns = list()
errs = list()
# Try catch the function and log the warnings/ errors.
for (i in 1:4) {
tryCatch(fun(i),
warning = function(w) warns[[i]] <<- w,
error = function(e) errs[[i]] <<- e
)
}
但是,输出显示错误尚未存储。
warns
# [[1]]
# <simpleWarning in fun(i): Warn. 1>
#
# [[2]]
# <simpleWarning in fun(i): Warn. 2>
#
# [[3]]
# <simpleWarning in fun(i): Warn. 3>
#
# [[4]]
# <simpleWarning in fun(i): Warn. 4>
errs
# list()
【问题讨论】:
-
我认为
purrr::quietly正是您想要的。 purrr.tidyverse.org/reference/safely.html 因为它明确输出错误和警告作为输出。 -
@AmitKohli,谢谢,了解
quietly很有用,但我很好奇R的基本解决方案! -
@RonakShah,谢谢,我现在正在看。如果有帮助,会通知您!
-
它有帮助,谢谢你提到这个问题!