R语言编写阀门状态判断函数出现unexpected 'else'错误求解
报错原因&解决方法
核心错误点
- 语法规则不符合R要求:R中
else必须与对应if的闭合大括号}位于同一行,你当前代码中else全部单独换行,且多层if的大括号提前闭合,导致R无法匹配到else对应的if语句,触发语法错误。 - 函数名拼写错误:代码后两处返回Pass的分支使用了大写开头的
Print,R标准打印函数为小写print,拼写错误会后续触发对象不存在的报错。 - 额外问题:多层嵌套if写法冗余,容易出现配对错误,也不便于后期维护。
修正后的可运行代码
直接对齐原有嵌套逻辑修正语法问题,可直接运行:
systemFail <- function(x) { if(df$valveOne[df$location == x] == 1) { if(df$valveTwo[df$location == x] == 1) { if(df$valveThree[df$location == x] == 1) { print("Fail") } else { print ("Pass") } } else { print("Pass") } } else { print("Pass") } }
更简洁的优化版本
通过逻辑判断替代多层嵌套,同时把数据框作为参数传入避免依赖全局变量,稳定性更强:
systemFail <- function(x, df) { # 提取对应位置的三个阀门取值 cur_valves <- df[df$location == x, c("valveOne", "valveTwo", "valveThree")] # 三个阀门全为1返回Fail,否则返回Pass if (all(cur_valves == 1)) { print("Fail") } else { print("Pass") } }
内容的提问来源于stack exchange,提问作者Roz
相关产品推荐
相关产品推荐

