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

R语言编写report_card函数结合sapply生成带fail标记的成绩矩阵

疑问解答

  • 关于sapply的适用性:完全可以用。R中向量/矩阵如果同时包含数值和文本内容,会自动统一为字符存储类型,不存在类型冲突问题;且sapply会自动将遍历返回的等长结果简化为矩阵结构,刚好匹配你需要的输出格式,比用lapply少一步手动转换结构的操作。
  • 关于嵌套列表的处理逻辑:你的数据是两层嵌套结构:第一层是所有学生的成绩集合,每个列表元素对应1名学生的全部成绩;第二层是单个学生的各科成绩,每个子元素对应1个科目的分数向量。写自定义函数时只需要针对单个学生的成绩子列表做处理即可,外层的跨学生遍历交给sapply完成。

可直接运行的实现代码

# 初始化给定的成绩数据
brice_grades <- list(math = c(90, 64, 100), reading = c(55, 71, 50),
                 science = c(100, 100, 98))
talia_grades <- list(math = c(70, 64, 70), reading = c(100, 80, 50),
                     science = c(100, 92, 98))
annie_grades <- list(math = c(14, 64, 50), reading = c(90, 71, 99),
                     science = c(88, 70, 98))

# 将所有学生成绩整合为一个大列表,作为sapply的遍历对象
all_grades <- list(
  brice_grades = brice_grades,
  talia_grades = talia_grades,
  annie_grades = annie_grades
)

# 自定义report_card函数:输入为单个学生的成绩列表
report_card <- function(student_score) {
  # 计算该学生每门科目的平均分
  subject_avg <- sapply(student_score, mean)
  # 按规则替换结果:低于70分标记为fail,其余保留1位小数
  output <- ifelse(subject_avg < 70, "fail", sprintf("%.1f", subject_avg))
  return(output)
}

# 配合sapply生成最终成绩矩阵
grade_matrix <- sapply(all_grades, report_card)

运行以下命令打印结果,即可得到和预期完全一致的输出:

print(grade_matrix, quote = FALSE)

打印效果:

brice_grades talia_grades annie_grades
math    84.7         fail         fail        
reading fail         76.7         86.7        
science 99.3         96.7         85.3        

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:18:21