如何判断变量为非零偶数?R语言条件语句报错求助
问题分析与代码修正
核心语法错误:else分支的写法
你的代码里else (i==0)是错误写法。在R中,else用于匹配所有前面if/else if条件都不满足的情况,不能在else后附加条件。如果需要单独判断i==0,应写成else if (i == 0);当前写法会导致:只要代码走到else分支,不管i实际值是什么,大括号内的代码都会执行((i==0)只是一个被执行但结果被忽略的表达式)。逻辑与运算符的选择
判断两个条件同时成立时:- 若
i是单个标量值,推荐用&&(短路求值,效率更高,第一个条件不满足时不会判断第二个) - 若
i是向量(多个值),使用&(对每个元素逐一判断)
你的代码用&在i为单个值时也能运行,但&&更适配单值场景。
- 若
修正后的代码
if (i > 0 && i %% 2 == 0) { P_lastround = f - (i/2*P_even + ceiling((i-1)/2)*P_odd) Fraction = P_lastround/P_even } else if (i > 0 && i %% 2 != 0) { P_lastround = f - (P_even*((i-1)/2) + P_even + floor(i/2)*P_odd) Fraction = P_lastround/P_odd } else if (i == 0) { P_lastround = f Fraction = P_lastround/P_even } else { # 可添加i<0时的处理逻辑,避免无分支匹配的情况 warning("i的值小于0,未定义处理逻辑") }原代码总是执行else分支的原因
原代码中else (i==0)的写法导致语法解析异常:R会先执行(i==0)表达式(结果不参与判断),直接执行后续大括号内的代码。也就是说,不管前两个if/else if的条件是否满足,只要走到else部分,就会执行第三个分支的逻辑。此外,如果i的类型异常(比如是字符型),会导致前两个条件判断返回FALSE,直接进入else分支。
内容的提问来源于stack exchange,提问作者BoxingIvy
相关产品推荐
相关产品推荐

