【问题标题】:Shiny progress bar from a global variable来自全局变量的闪亮进度条
【发布时间】:2018-04-09 07:31:53
【问题描述】:

我有一个包含自定义函数的库,我需要在闪亮的应用程序中使用它。该函数内部有一个 for 循环,我想使用该循环中的变量来更新进度条(而不是将函数复制到服务器文件,因为我想保持一切独立和干净)。到目前为止,我已经设法在函数使用“withProgress()”运行时弹出一条消息,但我想让它更好地显示已完成工作的百分比,所以最终用户不要不要向运行按钮发送垃圾邮件。 这是一个可重现的问题示例:

library(shiny)

# Library in separate file
snail_function <- function(){
  for (i in 1:100){
    Sys.sleep(1)
  }
}

# ui.R
ui <- shinyUI(fluidPage(
  tabsetPanel(
    tabPanel("1. Load Files"
           , fluidRow(actionButton("analysis", "Run analysis"))
           , fluidRow(
               plotOutput("bar")
             )
           )

    )
))

# server.R
server <- shinyServer(function(input, output, session) {
  observeEvent(input$analysis, {     
    output$bar <- renderPlot({
      withProgress(message = 'Running... (this may take a while)',
                   detail = 'Go get some coffee...', value = 0, {
                     snail_function()
                   })
      # do stuff
    })

  })

})

shinyApp(ui = ui, server = server)

所以,我想问题是:有什么方法可以使用 snail_function 循环中的 i 来设置栏中的进度? (使用全局变量或类似的东西)
谢谢!

【问题讨论】:

    标签: r shiny progress-bar


    【解决方案1】:

    保持它是一个干净的解决方案的一种可能性是在函数中添加一个参数progress,这表明我们是否想要增加进度,并且只有当它设置为TRUE时才调用incProgress。所以当我们想独立运行这个函数时,我们可以把它称为snail_function(FALSE)。下面显示了一个工作示例,希望对您有所帮助。


    library(shiny)
    
    # Library in separate file
    snail_function <- function(progress=FALSE){
      for (i in 1:100){
        Sys.sleep(1)
        if(progress)
          incProgress(1/100)
      }
    }
    
    # ui.R
    ui <- shinyUI(fluidPage(
      tabsetPanel(
        tabPanel("1. Load Files"
                 , fluidRow(actionButton("analysis", "Run analysis"))
                 , fluidRow(
                   plotOutput("bar")
                 )
        )
    
      )
    ))
    
    # server.R
    server <- shinyServer(function(input, output, session) {
      observeEvent(input$analysis, {     
        output$bar <- renderPlot({
          withProgress(message = 'Running... (this may take a while)',
                       detail = 'Go get some coffee...', value = 0, {
                         snail_function(progress=TRUE)
                       })
          # do stuff
        })
    
      })
    
    })
    
    shinyApp(ui,server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 2017-10-18
      • 2019-01-20
      • 2018-06-21
      • 2021-02-16
      • 1970-01-01
      相关资源
      最近更新 更多