首页 > 解决方案 > 如何将 checkr 包与 learnr 一起使用?

问题描述

包的练习教程是指包:learnrcheckr

checkr包目前提供了与 learnr 兼容的代码检查功能。

(请注意,此引用不指向CRAN 包检查器。不幸的是,包名称重复。)

但在learnr教程中没有建议如何将它与checkr. 另一方面,小插曲checkr仍然是草稿版本,讨论了高级问题,并且缺乏与learnr.

我正在寻找的是一个模型示例的具体过程。例如:如何使用two-plus-two示例检查学生输入,由learnrR Markdown 模板“交互式教程”提供。

所以我的问题是:如何检查learnr使用包添加二加二所需的 R 代码checkr


也许这个问题应该使用新标签(learnrcheckr),但我没有这样做的特权。

标签: rr-markdownlearnr

解决方案


经过多次实验,以下程序对我有用:

  1. 我已经开始了一个新项目并加载了 R Markdown 模板“交互式教程”并将其命名为“01-Exercises”。RStudio 生成了一个这个名称的文件夹,并将我的“01-Exercises.Rmd”放在这个文件夹中。
  2. 我已将该行添加tutorial_options(exercise.checker = checkr::check_for_learnr)到我的“01-Exercises.Rmd”文件的设置块中。
  3. 我添加了一个带有标签的新 R 块two-and-two-check。(= 与学生任务的块名称相同,但添加了-check.)
  4. 在这个 R 块中,我只添加了一行check_two_and_two(USER_CODE),它将成为我的测试函数。
  5. check_two_and_two在一个额外的脚本文件“check_test.R”中编写了一个测试函数,并保存在一个文件夹“www”下。
  6. 我已经将此脚本源到内存中的函数中。我rmarkdown::run("01-Exercises/01-Exercises.Rmd")从控制台跑了。

这是我的测试功能:

check_two_and_two <- function(USER_CODE) {
    code <- for_checkr(USER_CODE)
    t1 <- line_where(code, insist(all(F == "+"), "Your operator is {{F}}. This is not the assigned task."))
    if (failed(t1)) return(t1)
    t2 <- line_where(code, insist(all(V == 4), "Your solution is {{V}}. This is not the result (= 4) asked for."))
    if (failed(t2)) return(t2)
    line_binding(code, 2 + 2, failif(FALSE, "The pattern did not match."), message = "The result is correct, but I was looking for 2 + 2.")
}

即使这对我有用:也许有更好(更有效)的解决方案?


推荐阅读