【发布时间】:2020-10-01 06:51:06
【问题描述】:
有没有办法避免使用闪亮的重新计算绘制绘图之间的闪烁?
图在失效时变为灰色机制(闪烁)(在我们的例子中,这意味着值 $a 已更改),因此它们当前的显示不是最新的,但它们也没有完成重新计算 values$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)
【问题讨论】:
-
请检查我的回答。