访问 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
可以打印固定文本或反应数据。
我需要帮助解决一个基本的 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
可以打印固定文本或反应数据。