我正在使用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")
问题是不同版本中的相同问题使用不同的数字。怎么解决这个问题?
答案 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()
并因此在其相应的元信息中包含有四种不同的考试,其练习顺序不同。