以下是我的问题的一个可重现的示例:
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秒钟。如何更改代码,使其表现出预期的效果?
答案 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
})
}