Shiny “显示”;“部分”;结果(如绘图)一次可用,而不是一次全部可用(整页加载)?

Shiny “显示”;“部分”;结果(如绘图)一次可用,而不是一次全部可用(整页加载)?,shiny,shiny-reactivity,Shiny,Shiny Reactivity,我正在尝试构建一个闪亮的应用程序,它在一个页面上显示n个不同的绘图,并在绘图可用/计算时逐个发布(显示),而不是一次全部发布(整页加载) 这些图依赖于相同的输入变量(例如,箱数),但具有不同的数据源(实时数据库查询)。我希望绘图在准备好/逐个计算时变得可见,这样用户可以在其他绘图仍在加载时尽快开始使用数据/绘图。实际上,我的应用程序有10个或更多需要计算的绘图/表格,所以时间加起来 由于所有绘图都具有相同的输入相关性(箱数),因此输入的更改会使页面上的所有元素无效(它们变为灰色)。要检索数据(d

我正在尝试构建一个闪亮的应用程序,它在一个页面上显示n个不同的绘图,并在绘图可用/计算时逐个发布(显示),而不是一次全部发布(整页加载)

这些图依赖于相同的输入变量(例如,箱数),但具有不同的数据源(实时数据库查询)。我希望绘图在准备好/逐个计算时变得可见,这样用户可以在其他绘图仍在加载时尽快开始使用数据/绘图。实际上,我的应用程序有10个或更多需要计算的绘图/表格,所以时间加起来

由于所有绘图都具有相同的输入相关性(箱数),因此输入的更改会使页面上的所有元素无效(它们变为灰色)。要检索数据(db调用)并呈现绘图,每个绘图可能需要n秒的时间进行计算(例如:3秒)。此时,用户需要等待所有绘图计算完成(3+3=6秒)才能同时查看两个绘图。我对“惰性”负载的期望是,只要彼此之间没有依赖关系,结果就会显示为异步的

我的问题基于以下示例:

  • 有没有办法在3秒后显示图1,再过3秒后显示图2
  • 我想使用Shining withProgress()函数来显示每个绘图状态的更新。那还能用吗
  • 如果绘图2依赖于绘图1计算(输出/变量),该怎么办
  • 示例(我修改了这个示例的闪亮样板代码):

    库(闪亮)
    
    ui是单线程的。您可以使用来避免阻塞其他会话(会话间异步)。然而,目前还没有官方的方法来避免会话内阻塞。使用时应小心。此外,您可能需要检查library()。我知道R是单线程的,但不确定它是否会使此任务变得复杂,因为我可以让应用程序按顺序处理单个元素。只要它能在完成所有事情之前把一些结果推出去——假设结果之间没有依赖关系。
    library(shiny)
    
    ui <- fluidPage(
        sliderInput("bins",
                    "Number of bins:",
                    min = 1,
                    max = 50,
                    value = 30),
        plotOutput("distPlot1"),
        plotOutput("distPlot2")
    )
    
    server <- function(input, output) {
        output$distPlot1 <- renderPlot({
            Sys.sleep(3) # Simulating a slow database call
            x    <- faithful[, 2] # Actual data for the sake of this example
            bins <- seq(min(x), max(x), length.out = input$bins + 1)
            hist(x, breaks = bins, col = 'darkgray', border = 'white')
        })
        output$distPlot2 <- renderPlot({
            Sys.sleep(3) # Simulating a slow database call
            x    <- iris[, 2] # Actual data for the sake of this example
            bins <- seq(min(x), max(x), length.out = input$bins + 1)
            hist(x, breaks = bins, col = 'darkgray', border = 'white')
       })
    }
    
    shinyApp(ui=ui,server=server)