如何在 exshuffle 打开时更改问题的正确答案并从头开始复制考试(包 'exams')?

How to change the correct answer of a question and replicate exams from scratch when exshuffle is on (package 'exams')?

我有以下问题,其中 \exsolution 的参数是 {0010} 但它应该是 {1000}

\begin{question}
What is the capital of Italy

\begin{answerlist}
  \item Rome
  \item Paris
  \item Vienna
  \item Madrid
\end{answerlist}
\end{question}
\extype{schoice}
\exsolution{0010}
\exshuffle{4}

我已更正错误并重新运行使用相同种子从头开始创建和评分考试的过程。不幸的是,这个问题的答案顺序发生了变化(注意 \exshuffle{4}),因此分配给这个特定问题的分数是错误的。其他问题都可以。

由于 exshuffle 的实施方式,仅更改 {answerlist} and/or 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个元素(练习),其中有元素questionquestionlistsolutionsolutionlistmetainfosupplements。在这里,我们需要检查 questionlist 以修复 metainfo$solution。目前,维也纳被标记为正确:

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.

就足够了