R Shiny继续检查SQL查询是否已执行并终止进度条

时间:2017-04-30 23:23:28

标签: r shiny

我有一个R Shinyweb页面,它接收用户输入,按用户输入查询Postgres数据库,然后绘制信息。我正在尝试向Shiny应用程序添加状态栏。

但是,我的问题是我不知道查询执行需要多长时间。查询执行时间取决于用户输入。

有没有办法可以连续循环状态栏直到查询完成?如果是这样,我如何跟踪查询的完成情况?

以下是示例代码。 '图中的线(rnorm(as.numeric(输入$ n_breaks)))'是我的代码中的实际SQL查询。执行此行的时间未知。我不是在寻找实际的代码。我只需要了解如何实施这一概念。

library(shiny)
mycss <- "
#plot-container {
position: relative;
}
#loading-spinner {
position: absolute;
left: 50%;
top: 50%;
z-index: -1;
margin-top: -33px;  /* half of the spinner's height */
margin-left: -33px; /* half of the spinner's width */
}
#plot.recalculating {
z-index: -2;
}
"

ui <- fluidPage(
tags$head(tags$style(HTML(mycss))),
actionButton("btn", "Plot (takes 2 seconds)"),
selectInput(inputId = "n_breaks",
          label = "Select number of points",
          choices = c(100, 1000, 10000, 100000),
          selected = 100),
div(id = "plot-container",
  tags$img(src = "spinner.gif",
           id = "loading-spinner"),
  plotOutput("plot")
 )
)

server <- function(input, output, session) {
output$plot <- renderPlot({
input$btn
i = 0
while (i==0) {
  Sys.sleep(1)
  plot(rnorm(as.numeric(input$n_breaks)))
  i = 1
  }
})
}

shinyApp(ui,server)

1 个答案:

答案 0 :(得分:0)

我通过以下链接找到答案:

https://shiny.rstudio.com/articles/progress.html

基本上,如果进度函数调用另一个函数来执行长时间运行的计算,则无法完成此操作。我们能做的最好的事情是将它设置为起始值,比方说0.3,然后在完成时将其移动到1。例如,如果函数位于外部包中,则也可能是这样。