Доступ к значениям внутри eventReactive - PullRequest
1 голос
/ 01 марта 2020

Мне нужна помощь с основами c Блестящий вопрос. Моя цель - сделать простое приложение по математике (что такое 4 x 4?). Я хочу создать значения одной кнопкой, выбрать цифру c ответ, а затем нажать другую кнопку ответа. Моя проблема в том, что я не могу найти способ получить доступ к значениям, которые хранятся внутри 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)

1 Ответ

1 голос
/ 02 марта 2020

Вот что я бы сделал

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)

ИМХО, это хорошая практика, чтобы разделить реактивные данные и генерацию ввода / вывода. Под этим я подразумеваю, что в приведенном выше примере мы используем

  • reactiveValues, чтобы отслеживать изменяющиеся данные, и
  • observeEvent, чтобы отслеживать нажатия кнопок, которые могут измениться. Задав c элементы наших реактивных данных,
  • renderText может печатать либо фиксированный текст, либо реактивные данные.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...