R闪亮进度条用于pblapply函数

7
有没有办法在pblapply函数中插入闪亮的进度函数(incProgress),以便它可以在右上角显示百分比的进度。 IncProgress(...)需要每次lapply函数重新开始时进行评估,就像在基于文本的进度条中一样,在控制台中更新。
这是我的测试示例:
runApp(list(
 ui = shinyUI(
  fluidPage(
  actionButton("calc","Start calculation"),
  dataTableOutput("out")
 )
),
 server = shinyServer(function(session, input, output) {
 library(pbapply)

  #create list
  n <- 100; nn <- 1000
  g <- factor(round(n * runif(n * nn)))
  x <- rnorm(n * nn) + sqrt(as.numeric(g))
  xg <- split(x, g)

  observeEvent(input$calc > 0,{
   withProgress(message = "Initializing data manipulation process", value=0, {
     list = pblapply(xg,mean)
     #insert 'incProgress(percentage, detail = paste0("Progress: ",percentage)' in the pbapply or txtProgress function
  })
   output$out = renderDataTable(datatable(as.data.frame(unlist(list))))
  })
})
)
)
1个回答

5

我不知道你能否从pblapply中获取百分比,但是你可以在withProgress中这样做:

percentage <- 0
list = pblapply(xg,function(x) {
          Sys.sleep(0.05); 
          percentage <<- percentage + 1/length(xg)*100
          incProgress(1/length(xg), detail = paste0("Progress: ",round(percentage,2)))
          mean(x); 
})

我添加了 Sys.sleep 以减缓循环速度。如果您不需要在 R 控制台中查看进度,则可以使用 lapply


谢谢,问题解决了!还有一个小细节:incProgress(percentage, ...) 应该改为 incProgress(1/length(xh), ...),因为该函数会逐步增加 Shiny 进度条。 - samssan
你说得对,不需要用到“百分比”这个词,我已经编辑过了。 - NicE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接