由于exshuffle 的实施方式,仅更改{answerlist} 和/或exsolution 并获得正确的结果考试并不容易。
相反,我建议查看元信息并在那里修复它。我假设您正在使用exams2nops() 生成考试,并且已将 RDS 与元信息一起存储,对吧?我将通过以下方式生成这样的文件:
set.seed(1)
exams2nops(c("capitals.Rnw", "italy.Rnw", "switzerland.Rnw"), n = 5, dir = ".")
因此,有五门考试,每门考试有 3 个练习题,您的有问题的练习题italy.Rnw 排在第二位。元信息存储在metainfo.rds 中,我们可以通过
再次读取
x <- readRDS("metainfo.rds")
现在x 是一个包含 5 个元素(考试)的列表,每个元素都有 3 个元素(练习),其中有元素 question、questionlist、solution、solutionlist、metainfo、和supplements。在这里,我们需要检查questionlist 以修复metainfo$solution。目前,Vienna 被标记为正确:
x[[1]][[2]]$questionlist
## [1] "Madrid" "Vienna" "Rome" "Paris"
x[[1]][[2]]$metainfo$solution
## [1] FALSE TRUE FALSE FALSE
不过,应该是罗马:
x[[1]][[2]]$questionlist == "Rome"
## [1] FALSE FALSE TRUE FALSE
所以我们可以循环并保存结果。为了安全起见,我们还存储了原始 RDS 文件:
x <- readRDS("metainfo.rds")
file.copy("metainfo.rds", "metainfo-orig.rds")
for(i in seq_along(x)) {
x[[i]][[2]]$metainfo$solution <- x[[i]][[2]]$questionlist == "Rome"
}
saveRDS(x, "metainfo.rds")
最后说明:还有一个元素metainfo$string,在提取exams_metainfo()时用到。如果我们想使用它,我们还需要修复$string。但是对于nops_eval(),修复$solution就足够了。