gpt4 book ai didi

r - 使用 tryCatch 保存引发警告的对象

转载 作者:行者123 更新时间:2023-12-02 02:59:04 24 4
gpt4 key购买 nike

我正在尝试使用 tryCatch 返回计算后的表达式以及它生成的警告。我也想在不两次评估表达式的情况下执行此操作。这是一个非常简单的示例:

x <- -1
info <- tryCatch(sqrt(x),
error = function(e) e
warning = function(w) w)

这里 info 最终成为捕获的警告,我还想获得由 sqrt(x) 生成的 NaN

这个应用程序是我正在拟合的模型,我想知道弹出了什么警告,但我也只想评估模型一次。如果我可以拟合两次,我可以检查信息是否是警告,然后重新拟合它,但拟合模型两次是禁止的。

最佳答案

请参阅demo(error.keeping),它提供了以下内容

##' Catch *and* save both errors and warnings, and in the case of
##' a warning, also keep the computed result.
##'
##' @title tryCatch both warnings (with value) and errors
##' @param expr an \R expression to evaluate
##' @return a list with 'value' and 'warning', where
##' 'value' may be an error caught.
##' @author Martin Maechler;
##' Copyright (C) 2010-2012 The R Core Team
tryCatch.W.E <- function(expr)
{
W <- NULL
w.handler <- function(w){ # warning handler
W <<- w
invokeRestart("muffleWarning")
}
list(value = withCallingHandlers(tryCatch(expr, error = function(e) e),
warning = w.handler),
warning = W)
}

在您的示例中

tryCatch.W.E(sqrt(-1))
#> $value
#> [1] NaN
#>
#> $warning
#> <simpleWarning in sqrt(-1): NaNs produced>

关于r - 使用 tryCatch 保存引发警告的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32076454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com