在R Shiny中切换到新标签页之前如何运行代码?

时间:2019-01-27 13:27:00

标签: r shiny

以下是我的问题的一个可重现的示例:

library(shiny)

ui <- fluidPage(
  tabsetPanel(
    tabPanel(
      "Tab1",
      actionButton("button", "Click me")
    ),
    tabPanel(
      "Tab2",
      plotOutput("plot")
    )
  )
)

server <- function(input, output) {
  myPlot <- eventReactive(input$button, {
    Sys.sleep(5)
    hist(rnorm(100))
  })

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

shinyApp(ui = ui, server = server)

在当前状态下,我有两个选项卡-一个带有按钮,另一个包含绘图输出。我希望应用程序以如下方式运行:如果我位于选项卡1中并按操作按钮,然后等待5秒钟,则可以转到选项卡2并立即查看绘图输出。然而,此刻,当我转到选项卡2时,从此开始等待5秒钟。如何更改代码,使其表现出预期的效果?

1 个答案:

答案 0 :(得分:3)

我们可以使用observeEvent代替eventReactive

server <- function(input, output) {
    data<-reactiveValues(myPlot=NULL)
    observeEvent(input$button, {
      Sys.sleep(5)
      data$myPlot <- ggplot(mtcars)+geom_abline() #
    })
    output$plot <- renderPlot({
      data$myPlot
    })
  }
相关问题