1

我正在使用 R 包exams。我正在尝试使用 R/exams 生成完全相同考试的四个版本,但每个版本都有不同的问题顺序。另外,我想完全控制订单。例如,如果我有四个问题(1-2-3-4),我想生成版本:(2-3-1-4)(3-1-4-2)(2-1-3-4)(1-4-2-3)。这是我可以使用的代码:

base.order = list("tstat2.Rmd","Cholesky.Rmd","boxhist.Rmd","confint.Rmd")
order1 = base.order[c(2,3,1,4)]
order2 = base.order[c(3,1,4,2)]
order3 = base.order[c(2,1,3,4)]
order4 = base.order[c(1,4,2,3)]
set.seed(1322)
exams2pdf(order1,template="exam")
set.seed(1322)
exams2pdf(order2,template="exam")
set.seed(1322)
exams2pdf(order3,template="exam")
set.seed(1322)
exams2pdf(order4,template="exam")

问题是不同版本中的相同问题使用不同的数字。如何解决?

4

2 回答 2

1

今天在 R-Forge 上的 R/exams 开发版本中添加了一个替代解决方案,这有助于解决这个问题。它可以安装install.packages("exams", repos="http://R-Forge.R-project.org")

新版本允许提供一个练习矩阵,file其中行对应于不同的考试,列对应于考试中所需的练习顺序。seed此外,可以提供在处理相应练习之前立即设置的相应随机矩阵。通常,种子会因考试而异,但当然,这也可用于将种子固定为在此处根据需要在考试中相同。

首先,我们定义练习向量和所需排列矩阵:

exc <- c("tstat2.Rmd","cholesky.Rmd","boxhist.Rmd","confint.Rmd")
idx <- rbind(c(2, 3, 1, 4), c(3, 1, 4, 2), c(2, 1, 3, 4), c(1, 4, 2, 3))

然后,我们生成一个随机种子的随机向量(当然你也可以手动预先选择想要的种子):

set.seed(1)
rsd <- sample(1:9999, 4)

基于这些,我们可以将练习文件和种子设置为矩阵

exc <- exc[idx]
rsd <- rsd[idx]
dim(exc) <- dim(rsd) <- dim(idx)
exc
##      [,1]           [,2]          [,3]           [,4]          
## [1,] "cholesky.Rmd" "boxhist.Rmd" "tstat2.Rmd"   "confint.Rmd" 
## [2,] "boxhist.Rmd"  "tstat2.Rmd"  "confint.Rmd"  "cholesky.Rmd"
## [3,] "cholesky.Rmd" "tstat2.Rmd"  "boxhist.Rmd"  "confint.Rmd" 
## [4,] "tstat2.Rmd"   "confint.Rmd" "cholesky.Rmd" "boxhist.Rmd" 
rsd
##      [,1] [,2] [,3] [,4]
## [1,] 8004 4775 1017 9725
## [2,] 4775 1017 9725 8004
## [3,] 8004 1017 4775 9725
## [4,] 1017 9725 8004 4775

最后可以使用 any 生成考试template,例如:

library("exams")
exams2pdf(exc, seed = rsd, template = "exam.tex")

与使用四个不同模板生成单个考试的其他答案相比:

  • 很明显,exams2pdf()并且因此包含在其相应的元信息中,有四种不同的考试具有不同的练习顺序。
  • 练习在考试中完全相同的事实只是隐含地存储 - 种子相同的事实。
于 2019-07-24T11:28:53.253 回答
0

要使用 from R/exams 生成同一考试的不同版本exams2pdf(),最简单的解决方案是使用不同的模板。并且要修复订购,您可以更换

%% \exinput{exercises}

带有\input{}所需练习的语句,例如,

\input{exercise2}
\input{exercise3}
\input{exercise1}
\input{exercise4}

最初,我们引入此功能是为了允许在某些练习之间使用文本或进一步的特殊格式。但它也可用于更改排序。在 https://R-Forge.R-project.org/forum/attachment.php?attachid=395&group_id=1337&forum_id=4377我提出了一个 .zip 文件,其中包含.tex四个版本 (AD) 的纯文件,具有不同的所需顺序。有了这个,你可以这样做:

base.order <- list("tstat2.Rmd","cholesky.Rmd","boxhist.Rmd","confint.Rmd")
exams2pdf(base.order,
  template = c("plainA", "plainB", "plainC", "plainC", "plainD"))

一个潜在的警告是,它只存储一次元信息。因此,在纠正考试时,您必须重新排列解决方案,因为排列未存储在元信息中。一种可能的策略可能是编写一个小的包装函数来exams2pdf()(a)创建一个具有排列的矩阵,(b)生成修改后的.tex模板,(c)存储所有必要的元信息。

于 2017-12-15T20:20:54.510 回答