Для этого есть несколько способов.
Один из способов - сохранить значение в reactiveValues()
или просто использовать req()
, см. Ниже.
Проблема с использованиемeventReactive(activate(), ...
заключается в том, что он запускает код внутри только при выполнении activate()
, что происходит только при нажатии input$go
.
Воспроизводимый пример с req()
:
ui <- fluidPage(
actionButton("go", "Go"),
sliderInput("n", label = "Sample size", min = 1, max = 100, value = 10),
plotOutput('samples')
)
server <- function(input, output, session){
output$samples <- renderPlot({
req(input$go > 0)
hist(rnorm(input$n))
})
}
shinyApp(ui = ui, server = server)
Воспроизводимый пример с reactiveValues()
:
ui <- fluidPage(
actionButton("go", "Go"),
sliderInput("n", label = "Sample size", min = 1, max = 100, value = 10),
plotOutput('samples')
)
server <- function(input, output, session){
global <- reactiveValues(showPlot = FALSE)
observeEvent(input$go, {
global$showPlot <- TRUE
})
samples = reactive({
rnorm(input$n)
})
output$samples <- renderPlot({
req(global$showPlot)
hist(samples())
})
}
shinyApp(ui = ui, server = server)