Как запустить код перед переходом на новую вкладку в R Shiny? - PullRequest
0 голосов
/ 27 января 2019

Вот минимальный воспроизводимый пример моей проблемы:

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 голосов
/ 27 января 2019

Мы можем использовать 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
    })
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...