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

R语言psych包score.multiple.choice函数报错:Error in max.item - min.item : non-numeric argument to binary operator 解决方法咨询

解决score.multiple.choice函数的错误问题

我来帮你排查这个问题哈,这个错误提示Error in max.item - min.item : non-numeric argument to binary operator一般是因为函数处理数据时遇到了非预期的非数值类型,结合你的数据结构,大概率是这几个问题导致的,咱们一步步解决:

1. 先修正低级拼写错误

你代码里写的是sudent_all,少了一个t,应该是student_all——这个虽然不一定是这次错误的核心原因,但先修正避免后续找不到对象的问题。

2. 清理数据框:移除无关的id列

score.multiple.choice函数要求传入的正确答案(key)和学生答题数据(items)都应该是只包含题目选项的矩阵/数据框,不能带id列:

  • 你的key_A里的id列是冗余的,函数会把它当成一道题的答案来处理,和学生的id列(数值/字符)不匹配,直接引发类型错误。
  • 学生数据里的id列同理,会被函数误判为题目,导致计算时出现非数值操作的错误。

具体数据处理代码:

library(psych)

# 提取正确答案:去掉id列,转成向量(因为key_A只有1行正确答案)
correct_key <- as.vector(key_A[, -1])

# 提取学生答题数据:去掉id列,保留所有题目列
student_responses <- student_all[, -1]

3. 确保数据类型是字符型而非因子

如果你的学生答案或正确答案是因子类型(导入数据时默认可能转成因子),也会引发类型错误,需要转成字符型:

# 检查并转换学生答题数据为字符型
if (is.factor(student_responses[[1]])) {
  student_responses <- lapply(student_responses, as.character) %>% as.data.frame()
}

# 同样转换正确答案为字符型(如果需要)
correct_key <- as.character(correct_key)

4. 重新调用函数

完成上面的步骤后,再调用函数就应该能正常运行了:

# 注意参数顺序:key在前,学生答题数据在后,score=FALSE表示返回对错矩阵
Student.tf <- score.multiple.choice(key = correct_key, items = student_responses, score = FALSE)

验证逻辑

你可以先检查处理后的数据格式:

  • correct_key应该是一个长度为50的字符向量,每个元素是对应题目的正确选项(A-E)。
  • student_responses应该是100行×50列的数据框,每个元素是学生的答题选项(A-E)。

这样函数就能正确识别每道题的选项,对比学生答案生成对错矩阵啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:07:28