R 有没有一种方法可以避免在使用“重新计算”渲染绘图之间出现闪烁

R 有没有一种方法可以避免在使用“重新计算”渲染绘图之间出现闪烁,r,shiny,R,Shiny,有没有办法避免使用“重新计算”在渲染绘图之间闪烁 在失效机制(闪烁)下,绘图在失效时变为灰色(在本例中,这意味着值$a已更改),因此其当前显示不是最新的,但它们还没有完成对值$a的新值的重新计算。我们可以加速重新计算(通过并行化代码),但永远不能完全摆脱它。因此,删除此机制实际上会删除最终用户的信息,因为您现在无法知道绘图是否仍然是最新的,或者是否正在重新计算下一个值。。。我知道这可能很烦人,但我只是想让你明白为什么会这样 感谢您抽出时间阅读本文,如果您能提出一些解决方案,我们将非常高兴 lib

有没有办法避免使用“重新计算”在渲染绘图之间闪烁

在失效机制(闪烁)下,绘图在失效时变为灰色(在本例中,这意味着值$a已更改),因此其当前显示不是最新的,但它们还没有完成对值$a的新值的重新计算。我们可以加速重新计算(通过并行化代码),但永远不能完全摆脱它。因此,删除此机制实际上会删除最终用户的信息,因为您现在无法知道绘图是否仍然是最新的,或者是否正在重新计算下一个值。。。我知道这可能很烦人,但我只是想让你明白为什么会这样

感谢您抽出时间阅读本文,如果您能提出一些解决方案,我们将非常高兴

library("shiny")
library("parallel")
library("pryr")
ui <-  basicPage(
  plotOutput('plot1')
  ,plotOutput('plot2')
  ,plotOutput('plot3')
  ,plotOutput('plot4')
  ,plotOutput('plot5')
  ,plotOutput('plot6')
  ,plotOutput('plot7')
  ,plotOutput('plot8')
  ,plotOutput('plot9')
  ,plotOutput('plot10')
  ,plotOutput('plot11')
  ,plotOutput('plot12')
  ,plotOutput('plot13')
  ,plotOutput('plot14')
  ,plotOutput('plot15')
  ,plotOutput('plot16')
  ,plotOutput('plot17')
  ,plotOutput('plot18')
  ,plotOutput('plot19')
  ,plotOutput('plot20')
  ,plotOutput('plot21')
  ,plotOutput('plot22')
  ,plotOutput('plot23')
  ,plotOutput('plot24')
  ,plotOutput('plot25')
  ,plotOutput('plot26')
  ,plotOutput('plot27')
  ,plotOutput('plot28')
  ,plotOutput('plot29')
  ,plotOutput('plot30')
)


server <- function(input, output) {
  
  values <- reactiveValues(a=1) 
  observe({
    invalidateLater(5000)
    
    doPlot<-rnorm(1)
    
    values$a <- doPlot
    print(mem_used())
  })
  
  observeEvent(values$a,{
    mclapply(1:30,function(i){
      output[[paste0("plot",i)]] <- renderPlot({plot(rnorm(50),main=i)})
    })  
  })
}

shinyApp(ui,server)


##################################

library("shiny")
library("parallel")
library("pryr")

ui <-  basicPage(
  plotOutput('plot1')
  ,plotOutput('plot2')
  ,plotOutput('plot3')
  ,plotOutput('plot4')
  ,plotOutput('plot5')
  ,plotOutput('plot6')
  ,plotOutput('plot7')
  ,plotOutput('plot8')
  ,plotOutput('plot9')
  ,plotOutput('plot10')
  ,plotOutput('plot11')
  ,plotOutput('plot12')
  ,plotOutput('plot13')
  ,plotOutput('plot14')
  ,plotOutput('plot15')
  ,plotOutput('plot16')
  ,plotOutput('plot17')
  ,plotOutput('plot18')
  ,plotOutput('plot19')
  ,plotOutput('plot20')
  ,plotOutput('plot21')
  ,plotOutput('plot22')
  ,plotOutput('plot23')
  ,plotOutput('plot24')
  ,plotOutput('plot25')
  ,plotOutput('plot26')
  ,plotOutput('plot27')
  ,plotOutput('plot28')
  ,plotOutput('plot29')
  ,plotOutput('plot30')
)


server <- function(input, output) {
  values <- reactiveValues(a=1) 
  
  observe({
    invalidateLater(5000)
    
    doPlot<-rnorm(1)
    
    values$a <- doPlot
    print(mem_used())
  })
  
  mclapply(1:30,function(i){
    output[[paste0("plot",i)]] <<- renderPlot({values$a
      plot(rnorm(50),main=i)
    })
  })
  
}
shinyApp(ui,server)
库(“闪亮”)
图书馆(“平行”)
图书馆(“普赖尔”)

ui您可以通过css更改重新计算的不透明度,例如,将以下内容添加到您的ui代码中:

  tags$style(type="text/css",
             ".recalculating {opacity: 1.0;}"
  )

以您的例子:

library("shiny")
library("parallel")
library("pryr")
ui <-  basicPage(
  tags$style(type="text/css",
             ".recalculating {opacity: 1.0;}"
  ),
  plotOutput('plot1')
  ,plotOutput('plot2')
  ,plotOutput('plot3')
  ,plotOutput('plot4')
  ,plotOutput('plot5')
  ,plotOutput('plot6')
  ,plotOutput('plot7')
  ,plotOutput('plot8')
  ,plotOutput('plot9')
  ,plotOutput('plot10')
  ,plotOutput('plot11')
  ,plotOutput('plot12')
  ,plotOutput('plot13')
  ,plotOutput('plot14')
  ,plotOutput('plot15')
  ,plotOutput('plot16')
  ,plotOutput('plot17')
  ,plotOutput('plot18')
  ,plotOutput('plot19')
  ,plotOutput('plot20')
  ,plotOutput('plot21')
  ,plotOutput('plot22')
  ,plotOutput('plot23')
  ,plotOutput('plot24')
  ,plotOutput('plot25')
  ,plotOutput('plot26')
  ,plotOutput('plot27')
  ,plotOutput('plot28')
  ,plotOutput('plot29')
  ,plotOutput('plot30')
)


server <- function(input, output) {
  
  values <- reactiveValues(a=1) 
  observe({
    invalidateLater(5000)
    
    doPlot<-rnorm(1)
    
    values$a <- doPlot
    print(mem_used())
  })
  
  observeEvent(values$a,{
    mclapply(1:30,function(i){
      output[[paste0("plot",i)]] <- renderPlot({plot(rnorm(50),main=i)})
    })  
  })
}

shinyApp(ui,server)
库(“闪亮”)
图书馆(“平行”)
图书馆(“普赖尔”)

请检查我的答案。