来自R /考试

时间:2017-12-01 08:49:40

标签: r r-exams

我正在使用R包exams。我正在尝试使用R /考试生成完全相同考试的四个版本,但每个版本都有不同的问题顺序。此外,我想完全控制订单。例如,如果我有四个问题(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")

问题是不同版本中的相同问题使用不同的数字。怎么解决这个问题?

2 个答案:

答案 0 :(得分:0)

要使用R /考试中的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我用四个版本(A-D)中的普通.tex文件放置了一个.zip文件,其中包含不同的所需排序。有了这个,你可以这样做:

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)存储所有必要的元信息。 / p>

答案 1 :(得分:0)

今天在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

然后最终可以使用任何template生成考试,例如:

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

与其他答案相比,该答案生成具有四个不同模板的单个考试:

  • 很明显exams2pdf()并因此在其相应的元信息中包含有四种不同的考试,其练习顺序不同。
  • 由于种子相同,因此隐含地存储了各次考试中练习完全相同的事实。