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

GPA计算器计算结果异常,请求排查R代码错误并提供修复方案

R语言GPA计算器错误排查与修复

代码中的核心错误

  • 错误1:直接操作整个数据框而非成绩列
    函数里直接用transcript > 89.5,但transcript是包含课程、成绩、学分的三列数据框,这样的比较会对所有列执行,导致gradePoint的赋值逻辑完全混乱,根本没用到真正的成绩数据。
  • 错误2:未计算加权GPA
    GPA的正确计算方式是加权平均,即每门课的绩点乘以对应学分,求和后除以总学分,原代码完全没考虑学分权重。
  • 错误3:变量名错误
    函数最后返回GPA,但整个函数里从未定义过这个变量,属于未声明变量调用。
  • 错误4:区间边界处理遗漏
    原代码的区间是开区间(比如>89.5 & <100.0),逻辑上应该包含边界值(比如等于89.5的成绩也应该对应4.0),避免遗漏。
  • 错误5:gradePoint初始化与赋值逻辑错误
    初始化为NULL后用数据框的逻辑矩阵赋值,会导致gradePoint的长度和结构不符合预期。

修复后的完整代码

gpaCalculator <- function(transcript){
  # 提取成绩和学分列
  grades <- transcript$Grade
  credits <- transcript$Credits
  
  # 初始化与成绩长度一致的绩点向量
  gradePoint <- numeric(length(grades))
  
  # 修正区间逻辑,用闭区间覆盖边界值
  gradePoint[grades >= 89.5 & grades <= 100.0] <- 4.0
  gradePoint[grades >= 84.5 & grades < 89.5] <- 3.5
  gradePoint[grades >= 79.5 & grades < 84.5] <- 3.0
  gradePoint[grades >= 74.5 & grades < 79.5] <- 2.5
  gradePoint[grades >= 69.5 & grades < 74.5] <- 2.0
  gradePoint[grades >= 59.5 & grades < 69.5] <- 1.0
  gradePoint[grades >= 0.0 & grades < 59.5] <- 0.0
  
  # 计算加权GPA:(绩点×学分)总和 / 总学分
  GPA <- sum(gradePoint * credits) / sum(credits)
  return(round(GPA, 2))
}

# 测试数据
Course <- c("640:135","198:101","198:280","640:237","640:327","198:102","640:136","198:251","198:335")
Grade <- c(87,93,83,68,75,76,88,93,77)
Credits <- c(4,3,3,3,3,3,4,3,3)
transcript <- data.frame(Course,Grade,Credits)
print(transcript)

# 调用函数
gpaCalculator(transcript)

修复说明

  1. 提取目标列:明确从数据框中取出Grade和Credits列,避免操作整个数据框导致的逻辑混乱。
  2. 正确初始化向量:用numeric(length(grades))创建与成绩长度匹配的向量,确保赋值逻辑正常。
  3. 修正区间边界:将开区间调整为闭区间,覆盖所有可能的成绩取值,避免边界值遗漏。
  4. 计算加权平均:按照标准GPA公式计算,结合学分权重,运行后会返回预期的约2.98。
  5. 修正变量名问题:在函数内定义并赋值GPA变量,确保返回的是正确计算结果。

内容的提问来源于stack exchange,提问作者IanAnthony1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:35:33