使用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
相关产品推荐
相关产品推荐

