- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
动机:我想编写一个界面,使用 R 包中的问题 exams在 learnr问题/测验。在 R/exams 中,每个问题都是一个 R/Markdown (Rmd) 或 R/LaTeX (Rnw) 文件,具有指定问题、解决方案和更多元信息的特定结构。问题可以包含 R 代码以使其动态化,例如采样数字或某些文本构建 block 等。因此,工作流是首先通过 knitr::knit
或 utils 运行问题::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()
冲突。此外,当我在学习者教程之外运行我的代码时,它工作正常。
问题:我可以做一些侵入性较小的事情来让exams
与learnr
合作吗?例如,设置一些适当的 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/
我正在使用 learnr 开发教程包裹。在迭代测试过程中,我需要使教程文件失效。 我遵循了 Preserving Work 的解释,将 ID 和版本添加到 yaml header 。 但每当我更改 I
我正在尝试运行此程序以将米转换为英尺和英寸。使用3米 例如,我的高度应该是 9 英尺 10.11 英寸。我是新手并尝试使用 fgets 并且仍在努力使用 modf 作为任务来完成它。在下面的代码中 我
我是一名优秀的程序员,十分优秀!