You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用purrr::map时保留计算结果同时存储警告信息的方法

自定义possibly函数同时保留警告与计算结果

修改后的实现代码

input <- list(10, -1 , "A")

possibly2 <- function(.f) {
  .f <- purrr::as_mapper(.f)
  function(...) {
    warn_msg <- NULL
    # 捕获警告并保留计算结果
    result <- withCallingHandlers(
      .f(...),
      warning = function(w) {
        warn_msg <<- paste0("Warning: ", w$message)
        invokeRestart("muffleWarning")
      }
    )
    # 处理错误并统一输出结构
    tryCatch(
      {
        if (!is.null(warn_msg)) {
          list(result = result, warning = warn_msg)
        } else {
          result
        }
      },
      error = function(e) {
        list(error = paste0("Error: ", e$message))
      }
    )
  }
}

safer_log <- possibly2(.f = log)

map(input, safer_log) %>% 
  set_names(c("1. good input", "2. warning", "3. error"))

运行结果

$`1. good input`
[1] 2.302585

$`2. warning`
$`2. warning`$result
[1] NaN

$`2. warning`$warning
[1] "Warning: NaNs produced"


$`3. error`
$`3. error`$error
[1] "Error: non-numeric argument to mathematical function"

关键修改说明

  • 替换原tryCatch的警告处理逻辑:使用withCallingHandlers捕获警告,它不会像tryCatch那样中断函数执行,因此能保留函数的计算结果。
  • 用invokeRestart("muffleWarning")抑制警告的控制台输出,将警告信息存入变量统一管理。
  • 统一输出结构:
    • 无错误无警告时,直接返回函数计算结果;
    • 有警告时,返回包含result(计算结果)和warning(警告信息)的列表;
    • 发生错误时,返回包含error(错误信息)的列表,方便后续批量处理结果。

内容的提问来源于stack exchange,提问作者Rasul89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:06:21