如何在R中使用tryCatch实现报错时将目标变量值设为0
问题排查与正确实现
你原有代码存在两处核心问题:
tryCatch语法结构错误,error参数需要放在tryCatch的括号内部- 作用域问题:
error处理函数内部用<-赋值的变量仅在函数内部生效,无法修改外部的Retest_rate变量
推荐最优写法
直接将tryCatch的整体返回值赋值给Retest_rate,无需额外处理作用域问题:
Retest_rate <- tryCatch( { GetReTestRate(Data) }, error = function(e) { 0 } )
逻辑说明:
- 若
GetReTestRate(Data)正常运行,tryCatch会返回该函数的执行结果,直接赋值给Retest_rate - 若运行报错,会触发
error回调返回0,最终Retest_rate就会被赋值为0
适配原有写法的修正方案
如果你想保留原有在tryCatch内部赋值的逻辑,需要用<<-超赋值运算符修改上层环境的变量:
tryCatch( { Retest_rate <- GetReTestRate(Data) }, error = function(e) { Retest_rate <<- 0 } )
注意:该写法不推荐,超赋值运算符会跨环境修改变量,容易引发不可预期的变量污染问题,优先使用第一种将
tryCatch整体赋值的写法。
内容的提问来源于stack exchange,提问作者CMAHER
相关产品推荐
相关产品推荐

