使用tryCatch规避双重循环错误遇Moment ratio报错求助
解决JohnsonFit参数验证时的"Moment ratio in error"错误
你的问题出在tryCatch的作用范围不对——当前代码把整个双重循环都包在tryCatch里,只要某一组i,j参数触发错误,整个循环就会直接终止。要实现"遇到不符合的参数时维持程序运行",得把tryCatch放到循环内部,针对每一组参数单独处理错误。
修改后的代码如下:
for (i in -2:2) { for (j in 0:6) { tryCatch({ parms <- JohnsonFit(c(0, 1, i, j), moment = "use") sJohnson(parms) datos <- rJohnson(1000, parms) plot(density(datos)) }, error = function(e) { # 出错时可打印错误信息,也可直接跳过 message(sprintf("参数组合i=%d, j=%d出错: %s", i, j, e$message)) }) } }
关键修改点:
- 将
tryCatch移到内层循环中,确保每一组(i,j)参数的处理独立,某一组出错不会中断其他组的执行 - 添加
error回调函数,可打印出错的参数组合和错误信息,方便排查无效参数 - 移除外层多余的tryCatch包裹,让循环逻辑更清晰
补充说明:
"Moment ratio in error"错误表示传入的(i,j)对应的矩参数无法生成有效的Johnson分布。通过上述修改,程序会自动跳过这些无效组合,继续验证其他参数。如果需要记录有效参数,可在tryCatch的正常执行块中添加代码(比如将有效的i,j存入列表)。
内容的提问来源于stack exchange,提问作者BehSci
相关产品推荐
相关产品推荐

