条件反应式/事件反应式

时间:2018-06-25 09:50:40

标签: shiny

我想在闪亮的应用程序中添加一个复选框(input$autorefresh),以控制每次更改时数据输入自动更新(= {reactive())的位置,还是仅在以下情况下才更新数据输入:按钮(= input$refresh)被按下。以下代码描述了这个想法,但是我没想到它会起作用。我可以将reactive()与条件isolate()一起使用,但是由于我有很多输入,所以这不是很优雅。有什么想法吗?

if (input$autorefresh==TRUE){
    dataInput <- reactive({
      dosomething    
    })
} else {
    dataInput <- eventReactive(input$refresh,{
      dosomething
    })
}

1 个答案:

答案 0 :(得分:1)

您是否正在寻找类似的东西?

library(shiny)

ui <- fluidPage(
  checkboxInput("autorefresh","autorefresh", F),
  actionButton("refresh","refresh"),
  mainPanel(plotOutput("plot"))
)

autoInvalidate <- reactiveTimer(1000)

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

  data <- reactive({
    input$refresh
    data <- plot(rnorm(100),type="l",col="red")

    if(input$autorefresh){
      autoInvalidate()
      return(data)
    }
    return(data)
  })

  output$plot <- renderPlot({
    data()
  })
}

runApp(shinyApp(ui = ui, server = server))

enter image description here