R Shiny 我怎样才能在函数内更新进度条?
R Shiny how can i updateProgressBar inside a function?
我是新来的,如有错误请见谅。
我有以下代码在工作:
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)
但是现在我需要通过已经定义的函数(实际上是在源代码中)中的一些代码来更新进度条。作为测试,我定义了:
test_func <- function(){
for(i in 1:13){
updateProgressBar(
session = session,
id = "progress",
value = i,
total = 13,
title = paste("Progress ", i, "/", 13)
)
Sys.sleep(0.2)
}
}
并将服务器编辑为:
#### Server ####
server <- function(input, output, session){
observeEvent(input$go,{
test_func()
}
)
}
我收到以下错误:
“对象类型闭包不可子集化”
我怎样才能以正确的方式做到这一点?
提前致谢。
您的问题似乎与环境有关。
当我在 test_func
服务器函数之外定义时,我收到一个错误(与你的不同)。当我在 inside 服务器函数中定义它时,我得到了预期的行为。您可以在服务器功能中获取外部文件吗?
如果不是,将 session
作为参数传递给 test_func
。当我这样做并在服务器函数外部定义 test_func
时,一切都按预期进行。
我是新来的,如有错误请见谅。
我有以下代码在工作:
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)
但是现在我需要通过已经定义的函数(实际上是在源代码中)中的一些代码来更新进度条。作为测试,我定义了:
test_func <- function(){
for(i in 1:13){
updateProgressBar(
session = session,
id = "progress",
value = i,
total = 13,
title = paste("Progress ", i, "/", 13)
)
Sys.sleep(0.2)
}
}
并将服务器编辑为:
#### Server ####
server <- function(input, output, session){
observeEvent(input$go,{
test_func()
}
)
}
我收到以下错误: “对象类型闭包不可子集化”
我怎样才能以正确的方式做到这一点? 提前致谢。
您的问题似乎与环境有关。
当我在 test_func
服务器函数之外定义时,我收到一个错误(与你的不同)。当我在 inside 服务器函数中定义它时,我得到了预期的行为。您可以在服务器功能中获取外部文件吗?
如果不是,将 session
作为参数传递给 test_func
。当我这样做并在服务器函数外部定义 test_func
时,一切都按预期进行。