闪亮:从数据库加载数据到数据表(DT)的进度条

3
我还没有找到关于在Shiny中使用ProgressBar加载来自数据库的数据的解决方案。我的Shiny应用程序连接到数据库,用户直接从那里获取数据(因为我的SQL查询是反应性的,数据量会有所变化)。有时数据很大,加载需要一些时间。用户不知道是否正在进行某些操作或应用程序已经“卡住”了。我在我的应用程序中实现了最简单的进程指示器(在 output$tabelle <- DT :: renderDataTable({ ...)中),但似乎不够用:
progress <- shiny::Progress$new()

        on.exit(progress$close())

        progress$set(message = "Processing", value = 0)

用户仍然感到有些困惑。
我希望能够像这样使用 ?tcltk::tkProgressBar 实现类似于这种状态消息的显示(在 R 中显示状态消息):

enter image description here

pb <- tkProgressBar("test progress bar", "Some information in %",
        0, 100, 50)
Sys.sleep(0.5)
u <- c(0, sort(runif(20, 0 ,100)), 100)
for(i in u) {
    Sys.sleep(0.1)
    info <- sprintf("%d%% done", round(i))
    setTkProgressBar(pb, i, sprintf("test (%s)", info), info)
}
Sys.sleep(5)
close(pb)

使用一些百分比来评估从数据库加载数据的进度。

我不知道如何在我的闪亮应用程序中使用它。任何想法都将有所帮助。

提前致谢!

*一些简单的应用程序:

library("shiny")
library("DT")
shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) {
    output$tbl = DT::renderDataTable(
      iris)
  }
)

你已经找到解决方案了还是还在寻找呢? :) - Michal Majka
嗨,你好:)不是这个我想要的。我使用了类似这样的东西:output$tabelle <- DT::renderDataTable({ withProgress(message = 'Processing...', value = 0, { for (i in 1:10) { incProgress(1/30) Sys.sleep(0.25) } datatable(...}然而,这并没有提供百分比,并且也不太对应我们需要设置incProgress以加载数据的过程。 - Mal_a
好的,我会在空闲时间看一下它,因为这是一个非常有趣的问题。 - Michal Majka
哈哈,非常感谢!请慢慢来。 - Mal_a
你可能是通过某个按钮来加载数据的,对吧? - Michal Majka
是的,确切地说actionButton("button1", "Auswaehlen") - Mal_a
1个回答

9

可能最简单的方法是使用一个名为 shinysky 的包,它提供了 busyIndicator。你将不会得到一个进度条,但中间的加载动画应该也能起作用。你也可以通过设置要显示的文本、gif以及指示器显示后经过的时间(默认为一秒钟)来自定义它。


完整示例:

library("shiny")
library("DT")
library("shinysky")

shinyApp(
  ui = fluidPage(
    busyIndicator(),
    h3("Test"),
    hr(),
    DT::dataTableOutput('tbl')
  ),
  server = function(input, output) {
    output$tbl = DT::renderDataTable({
     data.frame(x = rnorm(7000000), y = runif(7000000))
    })
  }
)

1
默认情况下,当 shiny 忙碌时间超过一秒钟时,它将始终保持开启状态。 - Michal Majka
shinysky不在CRAN上,而是在github上。 - Karsten W.
当时它仍然可以在Cran上获取。 - Michal Majka

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