R语言while循环未满足设定条件提前终止问题排查
问题原因:代码逻辑漏洞,与R语言本身无关
你的循环终止条件存在逻辑漏洞,导致未达到目标范围就提前停止:
- 原条件
while((r-25)>0.01)仅判断了置信区间长度r大于25.01的情况,完全没覆盖r小于24.99的场景。 - 举个实际场景:如果某次迭代后r变为24.8,此时
(24.8-25)=-0.2,-0.2>0.01不成立,循环直接终止,但这个r根本不在24.99-25.01的目标范围内。
修正后的循环条件
把判断条件改成检查r与25的绝对差值是否超过0.01,就能覆盖所有不符合要求的情况:
counter <- 0 r <- 50 while(abs(r - 25) > 0.01){ # 修改为绝对差值判断 counter <- counter + 1 a <- replicate(500,profit()) CI_l <- mean(a) - (sd(a)/sqrt(500))*qnorm(0.975) CI_u <- mean(a) + (sd(a)/sqrt(500))*qnorm(0.975) r <- CI_u-CI_l } cat("It took ", counter, " tries to get to an interval of", r)
修改后,不管r是大于25.01还是小于24.99,循环都会继续执行,直到r落在24.99到25.01之间才会终止。
内容的提问来源于stack exchange,提问作者Matt_1448
相关产品推荐
相关产品推荐

