使用 furrr 和 future 在 Shiny 中的进度条

问题描述

我正在开发一个 Shiny 应用程序,我使用 furrr::future 将耗时的计算拆分为多个会话。我想在每次(或每 n)次计算后更新进度条。我发现下面的示例会更新进度条,但只有在会话完全完成后才会更新。这意味着 6 次更新几乎同时发生在最后。对于非 Shiny 版本,参数 .progress = T 会导致我想要的更新(参见第二个示例)。

有没有类似的东西可以用于闪亮的进度条?如果更新仅依赖于第一个工作人员,那甚至可以,因为所有工作人员的计算几乎相同。

提前感谢您的帮助!

示例 1:

library(shiny)
library(progressr)

app <- shinyApp(
  ui = fluidPage(
    plotOutput("plot")
  ),server = function(input,output) {
    output$plot <- renderPlot({
      X <- 1:24
      future::plan(future::multisession(workers = 6))
      
      withProgressShiny(message = "Calculation in progress",detail = "This may take a while ...",value = 0,{
                          p <- progressor(along = X)
                          y <- furrr::future_map(X,function(x) {
                            Sys.sleep(1)
                            p()
                          })
                        })
      plot(cars)
    })
  }
)

示例 2:

X <- 1:24

future::plan(future::multisession(workers = 6))
      

y <- 
  furrr::future_map(X,function(x) {Sys.sleep(1)
    p()
    },.progress = T)
      
future::plan(future::sequential()) 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)