You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RStudio中含if/else条件判断的代码失效问题咨询

你的实现与课程实现的差异及代码失效原因

核心差异

1. 错误处理的阶段不同

  • 你的代码是在所有投票输入完成、计算总票数之后才做NA判断;课程代码是在每个投票输入的函数内部就处理无效输入。
  • 课程的get_votes函数会在输入无效时主动返回0,从根源上避免后续求和出现NA;你的代码则是放任无效输入产生NA,等到最后才试图处理。

2. 对无效输入的处理逻辑不同

  • 课程代码将无效输入的票数视为0,保证总票数始终是有效整数,无需后续额外判断;你的代码试图在总票数为NA时返回错误提示,但逻辑存在致命问题。

你的代码无法正常运行的原因

  1. return的使用场景错误:return只能在函数内部使用,你写的if-else代码处于全局环境(不在任何函数中),执行到return时R无法识别该语句,既不会返回字符串,也不会输出任何内容。
  2. 原get_votes函数的隐性问题:你使用的原始get_votes没有显式return语句,当输入非数值内容时,as.integer(readline(...))会返回NA,函数默认返回这个NA。多个NA求和的结果还是NA,此时进入你的else分支,但return在这里不生效,导致没有任何输出。
  3. 冗余的输出逻辑(若保留原代码的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:59:53