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

使用dplyr计算IRR时遇错误中断,如何跳过错误继续执行?

解决方案:用tryCatch优雅处理错误

当xirr()函数调用uniroot()时,如果在指定区间内找不到符号变化(比如某些基金的现金流组合无法计算出有效IRR),就会抛出错误并中断整个分组计算流程。我们可以把xirr()的调用包裹在tryCatch()块中,捕获错误并为无法计算的基金返回"error",让代码继续运行。

修改后的代码如下:

library(dplyr)
library(tvm)

# 无需每次运行都安装tvm,所以移除install.packages语句
var1 <- my_data %>%
  group_by(Fund_name) %>%
  mutate(DATE = as.Date(DATE)) %>%
  summarise(
    IRR = tryCatch(
      expr = xirr(cf = Cashflow, d = DATE, tau = NULL, comp_freq = 12, interval = c(-1, 10)),
      error = function(e) "error"
    ),
    .groups = "drop" # 可选:完成汇总后移除分组结构
  )

补充说明:

  • .groups = "drop"参数可选,作用是在汇总完成后清除分组结构,让输出更简洁。
  • 如果希望IRR列保持数值类型,可以把返回的"error"替换为NA_real_。
  • 部分错误可能是因为基金的IRR超出了interval = c(-1, 10)的范围,你可以尝试调整这个区间参数,可能不需要tryCatch就能解决部分问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:01:23