RStudio报错:对象'retensiCTE'未找到,求原因及解决方案
问题原因与解决方案
错误原因
- 分支覆盖不全:你的代码仅处理了
alpha < pstar和alpha == pstar两种情况,当alpha > pstar时,retensiCTE变量从未被定义,执行到最后一行调用时自然会提示找不到对象。 - 赋值语法错误:在
alpha == pstar的分支中,你写的是retensiCTE >= sxinvers(pstar)——这是比较运算符,不是赋值操作。就算进入这个分支,retensiCTE依然没有被赋值,同样会触发找不到对象的错误。
结合你设置的变量值计算:pstar = 1/(1+90) ≈ 0.010989,而alpha = 0.05,显然alpha > pstar,刚好命中未处理的分支,直接导致报错。
修正后的代码示例
根据CTE(条件尾部期望)的常规计算逻辑,补充未覆盖的分支并修正赋值语法:
k=1.815264e-06 b=1/k alpha = 0.05 p=90 pstar=1/(1+p) pstar1=pstar sxinvers=function(x) { -b*log(x) } if (alpha < pstar){ retensiCTE = sxinvers(pstar) } else if (alpha == pstar){ retensiCTE = sxinvers(pstar) # 修正为赋值操作 } else { # 处理alpha > pstar的情况,可根据业务需求调整逻辑 retensiCTE = sxinvers(alpha) } retensiCTE
特殊场景调整
如果alpha == pstar时需要返回区间(比如题目要求的>=),可以改为返回向量表示范围:
else if (alpha == pstar){ retensiCTE = c(sxinvers(pstar), Inf) # 表示大于等于该值的区间 }
内容的提问来源于stack exchange,提问作者EDITHA
相关产品推荐
相关产品推荐

