繁体   English   中英

如何在 eventReactive() 中显示计算进度条?

[英]How to show progress bar for computation in eventReactive()?

如果评估eventReactive()中的某些内容,我想显示一个进度条。 但是,如果没有直接向 output 添加任何内容, withProgress()似乎无法按预期工作。 (请参阅下面由input$go1触发的第一部分。)

在具有多个面板的仪表板中,如果一个人导航到另一个子页面,它就会显示出来。 但是,我希望在按下按钮后立即显示它。

任何人都可以在下面的示例中帮助解决这个问题吗?

library(shiny)

ui <- fluidPage(
            actionButton("go1", "Go! Number 1"),
            actionButton("go2", "Go! Number 2"),
            plotOutput("plot")
            )



server <- function(input, output) {

    eventReactive(input$go1,{
        withProgress({
            for (i in 1:15) {
              incProgress(1/15)
              Sys.sleep(0.25)
              }
            }, message = "Doesn't show up!")
    })

output$plot <- renderPlot({
        input$go2
        withProgress({
            for (i in 1:15) {
                incProgress(1/15)
                Sys.sleep(0.1)
            }
        }, message = "Shows up!")
        plot(cars)
    })

}


shinyApp(ui = ui, server = server)

eventReactive在事件表达式被触发时不会被执行,它只会被标记为无效。 您必须请求它们的反应值才能执行它们 - 请检查以下内容:

library(shiny)

ui <- fluidPage(
  actionButton("go1", "Go! Number 1"),
  actionButton("go2", "Go! Number 2"),
  plotOutput("plot")
)

server <- function(input, output) {

  myData <- eventReactive(input$go1, {
    withProgress({
      for (i in 1:15) {
        incProgress(1/15)
        Sys.sleep(0.25)
      }
    }, message = "Doesn't show up!")
    cars
  })

  output$plot <- renderPlot({
    input$go2
    req(myData())
    withProgress({
      for (i in 1:15) {
        incProgress(1/15)
        Sys.sleep(0.1)
      }
    }, message = "Shows up!")
    plot(myData())
  })

}

shinyApp(ui = ui, server = server)

对于您的示例场景, observeEvent是更好的选择。 请看这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM