我还没有找到关于Shiny中ProgressBar的问题的解决方案,用于从数据库加载数据。我的Shiny App连接到数据库,用户直接从那里获取数据(因为我的SQL查询是被动的,数据量不同)。有时数据很大,加载需要一些时间。用户不知道是否有什么事情发生或者应用程序被卡住了#34;我在我的应用程序(output$tabelle <- DT::renderDataTable({
...)中实现了最简单的流程指标,但似乎还不够:
progress <- shiny::Progress$new()
on.exit(progress$close())
progress$set(message = "Processing", value = 0)
用户仍然感到有点困惑。
我希望使用?tcltk::tkProgressBar
(showing a status message in R)进行这样的smthg:
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)
}
)
答案 0 :(得分:6)
可能最简单的方法是使用提供shinysky
的包busyIndicator
。你不会得到一个进度条,但中间的加载动画也应该工作。您还可以通过将文本设置为show,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))
})
}
)