我试图在一个练习中加入一个计数器,计算生成考试时使用它的频率,但我注意到,当我运行 exams2nops 时,第一次似乎总是被计算两次。一些尝试似乎表明 .Rmd 文件的代码似乎只是在第一次运行两次。
这是NopsProblem.Rmd的代码
```{r data generation, echo = FALSE, results = "hide"}
envir <- .GlobalEnv
if (length(envir$N)==0) envir$N <- envir$num <- 0
envir$num <- envir$num + 1
```
Question
========
`r num`
Meta-information
================
extype: num
exsolution: 1
exname: problem
这个想法是,第一次运行时,计数器设置为 0,然后立即更新为 1。随后的每个调用都应将计数器增加 1。当我运行时
exams2pdf(c("NopsProblem.Rmd","NopsProblem.Rmd","NopsProblem.Rmd"))
,这工作没有问题。
但是,如果我运行 exams2nops(c("NopsProblem.Rmd","NopsProblem.Rmd","NopsProblem.Rmd"))
,第一个问题的计数器将从 2 开始。这是一个错误还是我错过了什么?
您的观察是正确的,没有错误。
exams2nops()
调用exams2pdf()
,但使用自定义模板。对于此模板,需要各种信息,例如每个问题的选项数量或开放式问题的数量等。exams2nops()
和 exams2pdf()
产生相同的随机生成练习,随机种子在第一次初始运行后恢复。另外,第一次运行是在单独的环境中执行的,因此结果不会影响后续运行的结果。您到底想计算什么?我希望对此有更好的选择,而不是将东西存储在全局环境中。