RStudio中含if/else条件判断的代码失效问题咨询
你的实现与课程实现的差异及代码失效原因
核心差异
1. 错误处理的阶段不同
- 你的代码是在所有投票输入完成、计算总票数之后才做NA判断;课程代码是在每个投票输入的函数内部就处理无效输入。
- 课程的
get_votes函数会在输入无效时主动返回0,从根源上避免后续求和出现NA;你的代码则是放任无效输入产生NA,等到最后才试图处理。
2. 对无效输入的处理逻辑不同
- 课程代码将无效输入的票数视为
0,保证总票数始终是有效整数,无需后续额外判断;你的代码试图在总票数为NA时返回错误提示,但逻辑存在致命问题。
你的代码无法正常运行的原因
return的使用场景错误:return只能在函数内部使用,你写的if-else代码处于全局环境(不在任何函数中),执行到return时R无法识别该语句,既不会返回字符串,也不会输出任何内容。- 原
get_votes函数的隐性问题:你使用的原始get_votes没有显式return语句,当输入非数值内容时,as.integer(readline(...))会返回NA,函数默认返回这个NA。多个NA求和的结果还是NA,此时进入你的else分支,但return在这里不生效,导致没有任何输出。 - 冗余的输出逻辑(若保留原代码的
cat):如果你的代码保留了原有代码中的cat("Total votes:", total_votes),当总票数为NA时,这行代码会先输出Total votes: NA,之后的if-else才会执行,但else分支的return依然无效。
修正思路
如果你想保留“输入无效时提示错误”的逻辑,建议把判断逻辑放到get_votes函数内部,示例如下:
get_votes <- function(candidate = "Votes"){ votes <- suppressWarnings(as.integer(readline(candidate))) if(is.na(votes)) { stop(paste0("Invalid input for ", candidate)) # 直接抛出错误提示 } return(votes) } mario <- get_votes("Mario: ") peach <- get_votes("Peach: ") bowser <- get_votes("Bowser: ") total_votes <- sum(mario, peach, bowser) cat("Total votes:", total_votes)
如果想继续使用全局判断逻辑,只需把return换成cat输出错误信息:
get_votes <- function(candidate = "Votes"){ votes <- suppressWarnings(as.integer(readline(candidate))) } mario <- get_votes("Mario: ") peach <- get_votes("Peach: ") bowser <- get_votes("Bowser: ") total_votes <- sum(mario, peach, bowser) if(!is.na(total_votes)){ cat("Total votes:", total_votes) } else { cat("Invalid answer") # 用cat替代return输出提示 }
内容的提问来源于stack exchange,提问作者alyosha
相关产品推荐
相关产品推荐

