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