首页 > 解决方案 > 在 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)
```

这会运行并创建一个框,我不知道如何定义正确答案并将提交的答案与正确答案进行比较。

在此处输入图像描述

谢谢!!任何帮助表示赞赏!

标签: rshiny

解决方案


您可以尝试使用learnr. 这将为您节省大量时间和麻烦。

要回答您的问题,创建一个看起来像 Shiny 的交互式文档会很有帮助。为此,您只需创建一个 Rmd 文件。只需使用 .Rmd 扩展名保存文件。

根据您的问题,我尝试使用此代码重新创建场景。在运行此之前:

  1. 确保您已learnr使用install.packages("learnr").

  2. 加载它使用library(learnr)

  3. 复制此代码并将其保存为 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社区会提供帮助。


推荐阅读