Таким образом, проблема в том, что когда вы нажимаете кнопку «очистить», которую вы устанавливаете
output$table <- renderTable({})
, и это заменяет существующее
output$table <- renderTable({data2()})
, это означает, что output$table
больше не зависит от data2()
, поэтому ничего не произойдет, когда data2
изменится. Вы навсегда изменили вывод, чтобы всегда показывать пустую таблицу.
Вместо того, чтобы изменять вывод, было бы лучше, если бы вы сделали data2
a reactiveVal()
. Таким образом, вы можете вручную сбросить его значение. Например,
data2 <- reactiveVal()
observeEvent(input$Submit, {
if (input$Tic != "") {
data2(iris %>% filter(Species %in% input$Tic))
}
})
observeEvent(input$Clear, {
data2(NULL)
})
output$table <- renderTable({
data2()
})
Таким образом, вместо eventReactive
, data2
является reactiveVal
, поэтому мы можем изменить его значение, когда мы observeEvent
для отправки или очистки. Если у вас есть data2 <- eventReactive(input$Submit,{})
, у вас нет другого способа изменить значение data2
, когда происходит любое другое событие.
Вы можете получить больше примеров здесь: https://shiny.rstudio.com/articles/action-buttons.html (в частности, шаблоны 3 и 4)