【问题标题】:How to show progress bar for computation in eventReactive()?如何在 eventReactive() 中显示计算进度条?
【发布时间】:2020-01-22 19:29:52
【问题描述】:

如果eventReactive() 中的某些内容被评估,我想显示一个进度条。 但是,如果没有将任何内容直接添加到输出中,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)

【问题讨论】:

  • TBH,不完全清楚你在问什么。也许,您错过了在output$plot 中的input$go2 之后从新行开始添加input$go1?:output$plot &lt;- renderPlot({ input$go2 input$go1 withProgress({ for (i in 1:15) { incProgress(1/15) Sys.sleep(0.1) } }, message = "Shows up!") plot(cars) })
  • @VitaliAvagyan 我希望eventReactive() 中的进度条能够正常工作。第二个只是为了表明它在产生输出时起作用。

标签: r shiny


【解决方案1】:

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 是更好的选择。请参阅this

【讨论】:

  • 抱歉让您久等了。实际上我的代码应该和你的一样。我在可重现的示例中犯了一个错误,忘记了分配。由于这似乎工作得很好,我的实际问题可能与shinydashboard 有关。不过还是谢谢。
  • 随意调整您的示例。也许我们会为您的实际问题找到解决方案。
猜你喜欢
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多