在函数中使用R shiny的progressBar

时间:2018-02-09 20:31:29

标签: r shiny

在服务器功能中使用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 个答案:

答案 0 :(得分:1)

在函数内使用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)