【问题标题】:Shiny app ploting every few seconds after button press按下按钮后每隔几秒钟就会有闪亮的应用程序绘图
【发布时间】:2018-07-06 08:59:44
【问题描述】:

我想构建一个应用程序,该应用程序将在按下按钮后开始绘图,并且它将继续绘图(在图表之间有一段时间),直到 for 循环结束。计算要绘制什么的函数相当复杂,所以我将提供一个来自基本 R 的最小工作示例,我想在闪亮的环境中运行。同样,我不确定如何处理这个问题,所以我无法提供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)
}

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

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

【问题讨论】:

    标签: r plot shiny


    【解决方案1】:

    好吧,我想我是个白痴,我发现了一个类似的问题discussed here(当然是在发布此问题后 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-02
      • 2017-09-21
      • 2014-10-04
      • 2018-06-07
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多