r语言 - 按下按钮后每隔几秒钟绘制一次闪亮的应用程序



我想构建一个应用程序,该应用程序将在按下按钮后开始绘制,并且它会继续绘制(图形之间有一段时间(,直到 for 周期结束。计算要绘制的内容的函数相当复杂,因此我将提供来自基础 R 的最小工作示例,我想在 shiny 中运行。同样,我不确定如何处理这个问题,所以我无法提供server.rui.r方面的代码。

for (i in 1:10){
    A <- matrix(nrow=5,ncol =5,sample(3,size =25,replace=T))
    Sys.sleep(0.3)
    image(A,xaxt='n', ann=FALSE,yaxt='n',bty="n",asp=1)
}

我应该如何处理这个问题?

我想我自己可以让进度条工作,但连续的阴谋阻止了我做任何事情。

好吧,我想我是个白痴,我发现了这里讨论的类似问题(当然是在发布此内容后 30 分钟(,我能够调整代码。希望这对将来的某人有所帮助。

library(shiny)
ui <- fluidPage(
  shinyjs::useShinyjs(),
  tags$style(type="text/css",
             ".recalculating {opacity: 1.0;}"),
      mainPanel(
        actionButton("Start","START", width='100%'),
        plotOutput("A")
      )
   )

server <- function(input, output, session) {
  par(bg = 'black')
  maxIter <- 5
  vals <- reactiveValues( A = matrix(nrow=5,ncol =5,sample(3,size =25,replace=T)),counter = 1)
  observeEvent(input$Start, {
    vals$counter <- 1 
    shinyjs::disable("Start")
    output$A <- renderPlot({
       Sys.sleep(0.5)
       image(vals$A,xaxt='n', ann=FALSE,yaxt='n',bty="n",asp=1)
       })

  })
     observeEvent(input$Start, {
                                observe({
                                        isolate({
                                              vals$A <- matrix(nrow=5,ncol =5,sample(3,size =25,replace=T))
                                              vals$counter <- vals$counter + 1 #for loop
                                              })
                                        if (isolate(vals$counter) <= maxIter) 
                                                invalidateLater(0, session)
                                        })
                                  })
     observe({vals$counter
       if (vals$counter > maxIter)
         shinyjs::enable("Start")
       })
}
shinyApp(ui = ui, server = server)

最新更新