R Shiny 如何在函数内更新ProgressBar?

问题描述

我是新来的,如有错误请见谅。

我有以下代码工作:

library(shinydashboard)
library(shinyWidgets)

#### Header ####
header <- dashboardHeader()

#### Sidebar ####
sidebar <- dashboardSidebar()

#### Body ####
body <- dashboardBody(
  actionButton("go",label = "Go!"),# Loading Bar
  progressBar("progress",value=0,total=100,title="",display_pct = TRUE)
)

ui = dashboardPage(header,sidebar,body)

#### Server ####
server <- function(input,output,session){
  observeEvent(input$go,{
    for(i in 1:13){
      updateProgressBar(
        session = session,id = "progress",value = i,total = 13,title = paste("Progress ",i,"/",13)
      )
      Sys.sleep(0.2)
    }
    }
  )
}

shinyApp(ui,server)

但是现在我需要通过已经定义的函数中的一些代码(实际上是在源代码中)来更新progressBar。作为我定义的测试:

test_func <- function(){
  for(i in 1:13){
    updateProgressBar(
      session = session,13)
    )
    Sys.sleep(0.2)
  }
}

并将服务器编辑为:

#### Server ####
server <- function(input,{
    test_func()
    }
  )
}

我收到以下错误: “对象类型闭包不可子集”

我怎样才能以正确的方式做到这一点? 提前致谢。

解决方法

您的问题似乎与环境有关。

当我在服务器函数之外定义 test_func 时出现错误(与您的不同)。当我在服务器功能内部定义它时,我得到了预期的行为。您可以在服务器功能中获取外部文件吗?

如果不是,则将 session 作为参数传递给 test_func。当我这样做并在服务器函数之外定义 test_func 时,一切都按预期工作。