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

R语言如何实现仅在函数运行失败时打印其传入参数?

问题原因

你当前的写法中,possibly()的otherwise参数是立即求值的:你写otherwise = message(x)时,只要执行到p <- possibly(...)这行代码,message(x)就会当场运行,和后续sum()是否执行失败没有关系,这就是调用t(1)时也会打印参数的核心原因。

修正方案

purrr 0.3.0及以上版本中,possibly的otherwise参数支持传入匿名函数,只有原函数执行失败时才会调用该函数获取兜底值,修正后代码如下:

library(purrr)
t <- function(x) {
  p <- possibly(
    .f = sum, 
    otherwise = ~ {
      message(x)
      NULL
    }
  )
  p(x)
}

测试效果

  • 执行t(1):sum()运行正常,仅返回结果[1] 1,不会打印额外参数
  • 执行t('a'):sum()运行失败,先打印参数a,再返回NULL,完全符合预期

备选方案(兼容低版本purrr)

如果你使用的purrr版本较低,也可以用R原生tryCatch实现相同逻辑:

t <- function(x) {
  tryCatch(
    sum(x),
    error = function(e) {
      message(x)
      NULL
    }
  )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:36:07