访问 eventReactive 中的值

Accessing values inside eventReactive

我需要帮助解决一个基本的 Shiny 问题。我的目标是制作一个简单的数学测验应用程序(什么是 4 x 4?)。我想用一个按钮创建值,select 一个数字答案,然后按另一个答案按钮。我的问题是我无法找到一种方法来访问存储在 eventReactive 中的值。我在下面的代码中简化了问题。这个应用程序的目标是请求一个数字,然后提供它。提前致谢!

# Goal: Fetch a number, then input that number, then receive paste("correct")/paste("incorrect)

ui <- fluidPage(
      textOutput(outputId = "out"),

      numericInput(inputId = "inn",
               label = "",
               value = 0),

  actionButton("answer", "Answer"),
  actionButton("question", "New Question"),
)




server <- function(input, output) {

  data <- eventReactive(input$question,{

    a <- sample.int(10,1)

    paste("Enter",a)

    })

  output$out <- renderText({data()})

}

shinyApp(ui,server)

这是我会做的

ui <- fluidPage(

      textOutput(outputId = "out"),
      numericInput(inputId = "inn", label = "", value = 0),
      actionButton("answer", "Answer"),
      actionButton("question", "New Question"),

)

server <- function(input, output, session) {

    data <- reactiveValues(number = NULL)

    output$out <- renderText({
        if (is.null(data$number))
            "Press 'New Question' button"
        else
            paste("Enter", data$number)
    })

    observeEvent(input$question, {
        data$number = sample(10, 1)
     })

    observeEvent(input$answer, {
        req(data$number, input$inn)
        if (data$number == input$inn)
            print("Correct")
            # Do something exciting
        else
            print("Incorrect")
            # Do something else
    })

}

shinyApp(ui,server)

IMO 最好将反应数据和 input/output 生成分开。我的意思是在上面的例子中我们使用

  • reactiveValues 跟踪变化的数据,
  • observeEvent 监控按钮点击,这可能会改变我们反应数据的特定元素,
  • renderText 可以打印固定文本或反应数据。