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
相关产品推荐
相关产品推荐

