R语言判断向量数值范围输出对应提示的代码报错求解
R向量范围判断的代码修复方案
需求说明
针对数值向量实现分支判断逻辑:数值超出指定范围时输出一类提示,所有数值都在范围内时输出另一类提示。
原有代码错误原因
- 第一段代码报
unexpected 'else' in "else"的两个核心原因:- R语法要求
else必须与上一个判断分支的闭合大括号}在同一行,如果把else单独放在新行,R会判定前一段if逻辑已经执行完毕,无法识别后续的else关键字。 - R中
if语句仅接受单个逻辑值作为判断条件,直接传入temps < 40这类和向量等长的逻辑向量时,R只会取向量第一个元素做判断,既会抛出警告,也无法实现整组向量的判断效果。
- R语法要求
- 第二段代码同时输出两类提示的原因:
三个判断语句完全独立、没有互斥关系:只要存在低于40的值就打印一次"Stay Home!",只要存在高于100的值就再打印一次"Stay Home!",最后无论前面分支是否触发,都会执行打印"Go Run!"的语句,自然会出现提示混出的问题。另外这段代码里ifelse的用法完全错误,该函数是逐元素向量化判断工具,必须传入「判断条件、满足条件返回值、不满足条件返回值」三个参数,仅传入print语句不符合语法要求。
正确实现代码
根据实际需求二选一即可:
- 全局判断:只要向量里有任意一个值越界,就统一输出待在家提示,所有值都在范围内才输出外出提示
temps <- c(34, 90, 93, 52, 108) if (any(temps < 40 | temps > 100)) { print("Stay Home!") } else { print("Go Run!") }
上述示例因为向量中存在34、108两个越界值,运行后会正确输出[1] "Stay Home!"。
- 逐元素判断:给向量里每个值单独匹配对应提示
temps <- c(34, 90, 93, 52, 108) ifelse(temps < 40 | temps > 100, "Stay Home!", "Go Run!")
运行后会按元素位置返回对应结果:
[1] "Stay Home!" "Go Run!" "Go Run!" "Go Run!" "Stay Home!"
编写注意事项
- 写R的多分支
if/else结构时,不要把else单独顶格放在新行,避免语法解析报错。 - 做全局整组判断时,用
any()(存在即满足)或all()(全部才满足)把逻辑向量转为单个逻辑值,再传入if做分支;需要逐元素返回结果时直接用ifelse(),不要把两类判断逻辑混用。
内容的提问来源于stack exchange,提问作者KalashniKEV
相关产品推荐
相关产品推荐

