我有一个简单的应用程序在global.R
中启动时加载了大量文件,加载数据文件的代码如下所示:
lst_dta <- lapply(X = seq_along(vec_dta_fls),
function(i) {
incProgress(
amount = 1 / length(vec_dta_fls),
message = paste("Reading file:", vec_dta_fls[i])
)
readr::read_rds(vec_dta_fls[i])
其中vec_dta_fls
包含要提供的文件的文件路径。
我想在withProgress
调用中封装此过程,以提供有关进度的动态信息。
withProgress(message = "Reading data files:",
expr = {
lst_dta <- lapply(X = seq_along(vec_dta_fls),
function(i) {
incProgress(
amount = 1 / length(vec_dta_fls),
message = paste("Reading file:", vec_dta_fls[i])
)
readr::read_rds(vec_dta_fls[i])
})
})
withProgress(message = "Reading data files:", expr = {
中的错误:
'session'
不是ShinySession对象。
我理解这是因为我在被动上下文中调用withProgress
,如linked article中所述:
添加进度指示器的最简单方法是使用withProgress() 在reactive(),observer()或renderXx()
中
我有办法解决吗?对于这种特殊情况,我不想在被动上下文中调用withProgress
,因为实际上我只想显示此加载消息一次。
答案 0 :(得分:1)
我想这可以解决问题
<强> server.R 强>
library(shiny)
shinyServer(function(input, output, session) {
load_data()
output$title_loaded_from_global <- renderUI({
strong(title_ui)
})
output$my_summary <- renderPrint({
summary(data1)
})
})
<强> ui.R 强>
library(shiny)
shinyUI(fluidPage(
uiOutput("title_loaded_from_global")
,verbatimTextOutput("my_summary")
))
<强> global.R 强>
load_data <- function() {
withProgress(message = 'Load data and title...', value = 0.5, {
# Load data
Sys.sleep(2)
data1 <<- iris
title_ui <<- "A great iris summary"
})
}