为什么 exams2nops 第一次似乎运行了两次 Markdown 代码?

问题描述 投票:0回答:1

我试图在一个练习中加入一个计数器,计算生成考试时使用它的频率,但我注意到,当我运行 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 开始。这是一个错误还是我错过了什么?

r r-exams
1个回答
0
投票

您的观察是正确的,没有错误。

  • 在内部,
    exams2nops()
    调用
    exams2pdf()
    ,但使用自定义模板。对于此模板,需要各种信息,例如每个问题的选项数量或开放式问题的数量等。
  • 获取这些信息的唯一方法是将所有练习编织一次并提取生成的元信息(并假设问题的类型和选择的数量在随机复制中不会变化)。
  • 为了确保
    exams2nops()
    exams2pdf()
    产生相同的随机生成练习,随机种子在第一次初始运行后恢复。另外,第一次运行是在单独的环境中执行的,因此结果不会影响后续运行的结果。

您到底想计算什么?我希望对此有更好的选择,而不是将东西存储在全局环境中。

© www.soinside.com 2019 - 2024. All rights reserved.