gpt4 book ai didi

r - 在学习者问题中使用 R/Markdown 失败

转载 作者:行者123 更新时间:2023-12-04 03:35:07 24 4
gpt4 key购买 nike

动机:我想编写一个界面,使用 R 包中的问题 examslearnr问题/测验。在 R/exams 中,每个问题都是一个 R/Markdown (Rmd) 或 R/LaTeX (Rnw) 文件,具有指定问题、解决方案和更多元信息的特定结构。问题可以包含 R 代码以使其动态化,例如采样数字或某些文本构建 block 等。因此,工作流是首先通过 knitr::knitutils 运行问题::Sweave 然后以合适的输出格式嵌入。

问题: 当我rmarkdown::run("learnr+rexams.Rmd") 学习者教程从 Rmd 练习中动态生成问题或测验时,我得到错误:

Error in if (grepl(not_valid_char_regex, label)) { :argument is of length zero

下面包含一个简单的可重现示例 learnr+rexams.Rmd 的代码。错误的原因似乎是学习者运行了一个函数 verify_tutorial_chunk_label(),它试图确保学习者 R block 标签的格式正确。然而,混淆是由 R/exams 包运行的 block 引起的,不必要地导致上述错误。

变通方法:我可以禁用 learnr 命名空间中的 verify_tutorial_chunk_label(),然后一切正常。或者我可以使用 Rnw 而不是 Rmd 练习,这样 learner 就不会与 Sweave() 冲突。此外,当我在学习者教程之外运行我的代码时,它工作正常。

问题:我可以做一些侵入性较小的事情来让examslearnr合作吗?例如,设置一些适当的 knitr 选项或类似的东西?

示例:这是复制问题的最小学习者教程 learnr+rexams.Rmd 的来源。请注意,一切都非常简化,仅适用于某些 R/考试练习,此处使用 function R/exams 附带的练习模板。

---
title: "learnr & R/exams"
output: learnr::tutorial
runtime: shiny_prerendered
---

```{r exams2learnr, include = FALSE}
exams2learnr <- function(file) {
x <- exams::xexams(file)[[1]][[1]]
x <- list(text = x$question, type = "learnr_text",
learnr::answer(x$metainfo$solution, correct = TRUE))
do.call(learnr::question, x)
}
## assignInNamespace("verify_tutorial_chunk_label", function() return(), ns = "learnr")
```

```{r rfunctions, echo = FALSE, message = FALSE}
exams2learnr("function.Rmd")
```

运行本教程(如上所述)会重现错误。为避免它,我可以取消注释 assignInNamespace() 调用 或者"function.Rmd" 替换为 "function.Rnw"

最佳答案

问题是在调用 learnr::question() 时,knitr 无法再找到 exams2learnr() 所在 block 的 block 标签被称为。您可以通过在调用 do.call(learnr_question, x) 之前设置当前 block 标签来解决此问题:

exams2learnr <- function(file, label = knitr::opts_current$get("label")) {
force(label)
x <- exams::xexams(file)[[1]][[1]]
x <- list(
text = x$question,
type = "learnr_text",
learnr::answer(x$metainfo$solution, correct = TRUE)
)
knitr::opts_current$set(label = label)
do.call(learnr::question, x)
}

这还允许您根据需要动态设置 label,它会成为 learnr 中问题的 ID。

关于r - 在学习者问题中使用 R/Markdown 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67066830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com