我写了一系列学习者教程来帮助学生学习R,并且我需要记录学生何时提交了对问题或练习的答案。 learnr
文档的一部分涉及到该主题(https://rstudio.github.io/learnr/publishing.html#recording_events),但显然没有达到我需要的详细程度。我有两个主要的问题区域,下面是我为示例教程粘贴的代码。
设置tutorial.event_recorder
选项:learnr
文档指出
“您可以使用自定义事件记录器功能捕获事件。此功能是通过
tutorial.event_recorder
全局选项指定的。”
我在网上找到了一个示例,其中在设置块中将其定义为
options(tutorial.event_recorder = learnr:::debug_event_recorder)
这就是我在代码中输入的内容,但是还有其他可能的选择吗?我什至正确使用了吗?
实际记录事件:learnr
文档创建了一个示例事件记录器功能,打印为标准输出,
tutorial_event_recorder <- function(tutorial_id, tutorial_version,
user_id, event, data) {
cat(tutorial_id, " (", tutorial_version, "): ", user_id , "\n", sep = "")
cat("event: ", event, "\n", sep = "")
}
比方说,我对这样的事件记录水平感到满意:我假设我在一些R代码块中定义了它,但是在哪里调用呢?一旦设置了tutorial_id
选项,程序是否就定义了tutorial_version
,user_id
和tutorial.event_recorder
全局参数?然后,例如将事件定义为exercise_submission
吗?是否有一个参数指定要提交的练习或问题?每个教程通常会有几个练习和问题。
如果有帮助,我已粘贴了示例代码的示例。最终,我想结合使用checkr
软件包及其事件记录,但是目前我没有时间做得很好。这些教程托管在服务器上,但是我首先尝试使事件记录在本地工作。非常感谢你!
---
title: "Tutorial: Categorical Variables"
output: learnr::tutorial
runtime: shiny_prerendered
tutorial:
id: "toytorial"
---
```{r setup, include=FALSE}
library(learnr)
knitr::opts_chunk$set(echo = TRUE)
tutorial_options(exercise.eval = FALSE)
options(tutorial.event_recorder = learnr:::debug_event_recorder)
```
### Test yourself
Use the `dim()` command to get the number of columns and rows in the data frame 'iris'.
```{r, ex1, exercise=TRUE, echo = FALSE}
```
```{r, q1, echo=FALSE}
question("How many rows are in the 'iris' data frame?",
answer("5"),
answer("150", correct=TRUE)
)
```
编辑:在Andrie于8/24回答并提供了有用的示例教程之后,Andrie发布在github.com/rstudio/learnr/issues/182上,我已将示例教程中的设置块更新为:
```{r setup, include=FALSE}
library(learnr)
knitr::opts_chunk$set(echo = TRUE)
tutorial_options(exercise.eval = FALSE)
new_recorder <- function(tutorial_id, tutorial_version, user_id, event, data) {
cat(tutorial_id, " (", tutorial_version, "): ", user_id, ", ", event, ", ", data$label, ", ", data$answers, ", ", data$correct, "\n", sep = "")
}
options(tutorial.event_recorder = new_recorder)
```
现在,我知道要查看RStudio中的R Markdown窗口,我可以在回答问题或尝试练习时看到录像。我仍然不知道如何将事件记录写入文件或数据库:sink()
似乎对我不起作用。
答案 0 :(得分:1)
关于将事件记录写入文件,执行此操作的基本方法是将file = "/my_path/my_filename.txt"
和append = TRUE
作为附加参数传递给cat
中的new_recorder
函数功能。
答案 1 :(得分:0)
我运行了代码,并观察了stdout
的以下输出(如果使用RStudio,则在RMarkdown
窗格中)。
此输出回答了您的第一个问题,有关如何定义event
。从输出中可以清楚地看到learnr
记录功能会自动记录该事件。在这种情况下,事件分别为exercise_submission
和question_submission
。
C:/Users/apdev/Documents/temp (1.0): apdev
event: exercise_submission
List of 6
$ label : chr "ex1"
$ code : chr "\ndim(iris)\n"
$ output : 'html' chr "\n\n\n<pre><code>[1] 150 5</code></pre>\n"
..- attr(*, "html")= logi TRUE
..- attr(*, "html_dependencies")= list()
$ error_message: NULL
$ checked : logi FALSE
$ feedback : NULL
C:/Users/apdev/Documents/temp (1.0): apdev
event: question_submission
List of 4
$ label : chr "q1"
$ question: chr "How many rows are in the 'iris' data frame?"
$ answers : chr "5"
$ correct : logi FALSE
您的其他问题在文档Tutorial identifiers下得到回答。简而言之,learnr
将使用以下默认值作为标识符:
tutorial_id
:网络来源和教程的路径。tutorial_version
:1.0 user_id
:执行教程的服务器用户的帐户名我已经尝试过了,它可以与RStudio Connect一起使用。
但是,我怀疑learnr
程序包中可能存在错误,因为更改YAML标头中的默认值似乎没有任何效果。我仍在尝试深入了解。