代码之家  ›  专栏  ›  技术社区  ›  Xavier Prudent

在函数中使用R Shining的progressBar

  •  2
  • Xavier Prudent  · 技术社区  · 7 年前

    在R shiny中使用progressbar在服务器功能中非常简单:

    library(shiny)
    source(myFunctions.R)
    
    shinyServer(function(input, output) {
    
    withProgress(message = 'Chargement des données', value = 0, {
    incProgress(0.5)
    function1()
    incProgress(0.6)
    function2()
    incProgress(0.7)
    function3()
    incProgress(0.8)
    })
    })
    

    但如果我想将它们放在函数中,例如:

    Allfunction <- function(){
    withProgress(message = 'Chargement des données', value = 0, {
    incProgress(0.5)
    function1()
    incProgress(0.6)
    function2()
    incProgress(0.7)
    function3()
    incProgress(0.8)
    })
    }
    

    因此

    shinyServer(function(input, output) {
    Allfunction()
    })
    

    然后我得到

    Warning: Error in withProgress: 'session' is not a ShinySession object.
    

    并向函数添加会话参数,正如谷歌论坛上所宣传的那样,并没有做到这一点。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Florian    7 年前

    使用 withProgress() 函数内部不应该是问题。下面是一个工作示例。顺便注意一下 incProgress 累计工作,即如果您想从 0.5 0.6 ,您只需添加 0.1 作为函数中的参数。

    希望这有帮助!

    library(shiny)
    
    ui <- shinyUI(fluidPage(
      actionButton('click','click me!')
    
    ))
    
    Allfunction <- function(){
      withProgress(message = 'Chargement des données', value = 0, {
        incProgress(0.5)
        function1()
        incProgress(0.1)
        function2()
        incProgress(0.1)
        function3()
        incProgress(0.1)
      })
    }
    
    function1 <- function(){Sys.sleep(1)}
    function2 <- function1
    function3 <- function1
    
    server <- function(input, output, session) {
    
      observeEvent(input$click, {
        Allfunction()
      })
    
    }
    
    shinyApp(ui, server)
    
    推荐文章