r - 在 R markdown 中创建一个简单的问题和答案
问题描述
我正在尝试创建一个交互式文档,学生可以在其中输入他们对家庭作业问题的答案。
output:
html_document:
toc: true
toc_float:
collapsed: true
smooth_scroll: false
toc_depth: 4
theme: yeti
highlight: tango
runtime: shiny
我想要一个简单的问题“输入所有可能的破裂路径”。正确的答案是c("ABEF","ABCDG","ABCDEF","ABDEF")
我希望学生能够提交尽可能多的提交,直到获得所有四个正确答案。
我对闪亮很陌生,这是我刚开始的尝试。
```{r letter-a, echo=FALSE}
library(shiny)
ui <- fluidPage(
textInput('answer', label = 'Input all possible rupture paths', width = '30%'),
actionButton("go", "Submit!"),
uiOutput('feedback')
)
shinyUI(UI)
```
这会运行并创建一个框,我不知道如何定义正确答案并将提交的答案与正确答案进行比较。
谢谢!!任何帮助表示赞赏!
解决方案
您可以尝试使用learnr
. 这将为您节省大量时间和麻烦。
要回答您的问题,创建一个看起来像 Shiny 的交互式文档会很有帮助。为此,您只需创建一个 Rmd 文件。只需使用 .Rmd 扩展名保存文件。
根据您的问题,我尝试使用此代码重新创建场景。在运行此之前:
确保您已
learnr
使用install.packages("learnr")
.加载它使用
library(learnr)
复制此代码并将其保存为 Rmd 文件。或者你可以通过 File -> New File -> R Markdown -> From Template -> Interactive Tutorial -> OK 开始一个新文档
--- title: "Tutorial" output: learnr::tutorial runtime: shiny_prerendered --- ```{r setup, include=FALSE} library(learnr) knitr::opts_chunk$set(echo = FALSE) ``` #
```{r options, echo = FALSE} question( "Input all possible rupture paths", answer("ABC"), answer("ABCD"), answer("ABEF, ABCDG, ABCDEF, ABDEF", correct = TRUE, message = "Correct Answer!"), type = "learnr_text", # radio try_again = "Wrong Answer, please try again", message = "Remember to enter answer in this format seperated by commas: ABC, ABCD", submit_button = "Submit", try_again_button = "Try Again", allow_retry = TRUE, options = list( placeholder = "Enter answer in this format seperated by commas: ABC, ABCD", trim = TRUE ) )
要了解更多信息,这将帮助您入门:https ://rstudio.github.io/learnr/#Getting_Started 。
这里有一些示例代码:https ://rstudio.github.io/learnr/questions.html
```{r letter-a, echo=FALSE}
question("What number is the letter A in the English alphabet?",
answer("8"),
answer("14"),
answer("1", correct = TRUE),
answer("23")
)
```
您还可以让学生继续尝试使用 allow_retry = TRUE
更新:
您可以在问题功能中添加以下行。
question(
"Input all possible rupture paths",
answer("ABC"),
answer("ABCD"),
answer("ABEF, ABCDG, ABCDEF, ABDEF", correct = TRUE),
answer('ABCDEF, ABCDG, ABDEF, ABEF', correct = TRUE),
answer('ABCDEF, ABCDG, ABEF, ABDEF', correct = TRUE),
answer('ABCDEF, ABDEF, ABCDG, ABEF', correct = TRUE),
answer('ABCDEF, ABDEF, ABEF, ABCDG', correct = TRUE),
answer('ABCDEF, ABEF, ABCDG, ABDEF', correct = TRUE),
answer('ABCDEF, ABEF, ABDEF, ABCDG', correct = TRUE),
answer('ABCDG, ABCDEF, ABDEF, ABEF', correct = TRUE),
answer('ABCDG, ABCDEF, ABEF, ABDEF', correct = TRUE),
answer('ABCDG, ABDEF, ABCDEF, ABEF', correct = TRUE),
answer('ABCDG, ABDEF, ABEF, ABCDEF', correct = TRUE),
answer('ABCDG, ABEF, ABCDEF, ABDEF', correct = TRUE),
answer('ABCDG, ABEF, ABDEF, ABCDEF', correct = TRUE),
answer('ABDEF, ABCDEF, ABCDG, ABEF', correct = TRUE),
answer('ABDEF, ABCDEF, ABEF, ABCDG', correct = TRUE),
answer('ABDEF, ABCDG, ABCDEF, ABEF', correct = TRUE),
answer('ABDEF, ABCDG, ABEF, ABCDEF', correct = TRUE),
answer('ABDEF, ABEF, ABCDEF, ABCDG', correct = TRUE),
answer('ABDEF, ABEF, ABCDG, ABCDEF', correct = TRUE),
answer('ABEF, ABCDEF, ABCDG, ABDEF', correct = TRUE),
answer('ABEF, ABCDEF, ABDEF, ABCDG', correct = TRUE),
answer('ABEF, ABCDG, ABCDEF, ABDEF', correct = TRUE),
answer('ABEF, ABCDG, ABDEF, ABCDEF', correct = TRUE),
answer('ABEF, ABDEF, ABCDEF, ABCDG', correct = TRUE),
answer('ABEF, ABDEF, ABCDG, ABCDEF', correct = TRUE),
type = "learnr_text", # radio
try_again = "Wrong Answer, please try again",
message = "Remember to enter answer in this format seperated by commas: ABC, ABCD",
submit_button = "Submit",
try_again_button = "Try Again",
allow_retry = TRUE,
options = list(
placeholder = "Enter answer in this format seperated by commas: ABC, ABCD",
trim = TRUE
)
)
为了生成这个,我做了以下事情。我确信通过将其转换为函数有更好的方法来做到这一点。这是我现在能做的。
a <- data.frame(gtools::permutations(4, 4, c("ABEF","ABCDG","ABCDEF","ABDEF")))
b <- paste(a$X1, a$X2, a$X3, a$X4, sep = ", ")
c <- paste("'", b, "'", sep = "")
d <- paste(c , "correct = TRUE)",sep = ", ")
e <- paste0( "answer(", d)
e
运行它会给出这个,然后你可以将它粘贴到问题函数中:
[1] "answer('ABCDEF, ABCDG, ABDEF, ABEF', correct = TRUE)"
[2] "answer('ABCDEF, ABCDG, ABEF, ABDEF', correct = TRUE)"
[3] "answer('ABCDEF, ABDEF, ABCDG, ABEF', correct = TRUE)"
[4] "answer('ABCDEF, ABDEF, ABEF, ABCDG', correct = TRUE)"
[5] "answer('ABCDEF, ABEF, ABCDG, ABDEF', correct = TRUE)"
[6] "answer('ABCDEF, ABEF, ABDEF, ABCDG', correct = TRUE)"
[7] "answer('ABCDG, ABCDEF, ABDEF, ABEF', correct = TRUE)"
[8] "answer('ABCDG, ABCDEF, ABEF, ABDEF', correct = TRUE)"
[9] "answer('ABCDG, ABDEF, ABCDEF, ABEF', correct = TRUE)"
[10] "answer('ABCDG, ABDEF, ABEF, ABCDEF', correct = TRUE)"
[11] "answer('ABCDG, ABEF, ABCDEF, ABDEF', correct = TRUE)"
[12] "answer('ABCDG, ABEF, ABDEF, ABCDEF', correct = TRUE)"
[13] "answer('ABDEF, ABCDEF, ABCDG, ABEF', correct = TRUE)"
[14] "answer('ABDEF, ABCDEF, ABEF, ABCDG', correct = TRUE)"
[15] "answer('ABDEF, ABCDG, ABCDEF, ABEF', correct = TRUE)"
[16] "answer('ABDEF, ABCDG, ABEF, ABCDEF', correct = TRUE)"
[17] "answer('ABDEF, ABEF, ABCDEF, ABCDG', correct = TRUE)"
[18] "answer('ABDEF, ABEF, ABCDG, ABCDEF', correct = TRUE)"
[19] "answer('ABEF, ABCDEF, ABCDG, ABDEF', correct = TRUE)"
[20] "answer('ABEF, ABCDEF, ABDEF, ABCDG', correct = TRUE)"
[21] "answer('ABEF, ABCDG, ABCDEF, ABDEF', correct = TRUE)"
[22] "answer('ABEF, ABCDG, ABDEF, ABCDEF', correct = TRUE)"
[23] "answer('ABEF, ABDEF, ABCDEF, ABCDG', correct = TRUE)"
[24] "answer('ABEF, ABDEF, ABCDG, ABCDEF', correct = TRUE)"
肯定有更好的方法来做到这一点。尝试发布一个新问题,我相信learnr
社区会提供帮助。
推荐阅读
- ios - 如何将 json 转换为字典以进行 POST api 调用 Swift
- django - 如何在 Django 中手动渲染和绑定choiceFile
- text - 如何使用ansible替换文件中的特定行?
- javascript - 如何使用 ASP.NET Core 2.1 和 React JS 创建下载功能?
- android - Android Studio AVD 模拟器找不到多个笔记本电脑摄像头
- python - 组合的 GRU 和 CNN 网络总是为所有输入返回相同的值
- chatbot - Botium-Box 是否会自动执行 Alexa Skill 的帐户链接流程?
- regex - 正则表达式替换 Linux shell 脚本中的密码?
- javascript - 从本地服务器事务进行事务时未添加
- java - 不使用注释的杰克逊多态反序列化