Как загрузить файл Rdata только один раз в ShinyApp

Я развернул блестящее приложение, в котором используется файл .Rdata размером ~ 700 МБ.

Файл Rdata загружается в файл server-inputdata.R, а файл server.R выглядит так, как показано ниже:

options(shiny.maxRequestSize = 100*1024^2)

source("helpers.R")
print(sessionInfo())

shinyServer(function(input, output,session) {
  source("server-inputdata.R",local = TRUE)
  source("server2.R",local = TRUE)
  source("server3.R",local = TRUE) 
})

Здесь server2.R и server3.R есть код визуализации, который использует данные, загруженные из файла .Rdata в server-inputdata.R.

Всякий раз, когда приложение загружается, файл Rdata загружается для каждого пользователя. Может ли кто-нибудь помочь, как загрузить данные только один раз и предоставить немедленный доступ пользователям. Проверил аналогичную тему здесь https://stackoverflow.com/questions/31557428/r-load-only-once-a-rdata-in-a-deployed-shinyapp, которая не помогла решить мою проблему.

Вот код в server-inputdata.R

inputDataReactive <- reactive({
    load('04.Rdata')
    return(list("data"=data_results,
                "data_results_table"=data_results_table))
    print("uploaded data")
})

person chas    schedule 09.03.2021    source источник
comment
Если ваше развертывание контейнеризировано, например, наshiniapps.io, то это просто невозможно: у каждого пользователя есть свой собственный экземпляр приложения. Возможно ли это в других конфигурациях, и если да, то как это сделать, я не знаю. Я подозреваю, что решение будет зависеть от установки.   -  person Limey    schedule 09.03.2021


Ответы (2)


Попробуйте поместить исходную строку: source("server-inputdata.R",local = TRUE) за пределы вашей серверной функции, например:

options(shiny.maxRequestSize = 100*1024^2)

source("helpers.R")
source("server-inputdata.R",local = TRUE)  # loaded once per session
print(sessionInfo())

shinyServer(function(input, output,session) {
  source("server2.R",local = TRUE)
  source("server3.R",local = TRUE) 
})
person Trusky    schedule 09.03.2021
comment
Пробовал этот подход и не работал. запустил приложение runApp(port=5050) и попытался запустить в веб-браузере, и набор данных снова загружается. Чтобы дать больше информации, load() находится внутри реактивной функции, обновленной в OP. - person chas; 09.03.2021
comment
также попробовал source("server-inputdata.R",local = FALSE) согласно shiny.rstudio.com/articles/scoping.html, который должен загружаться в глобальном окружении, тоже не помогло. Набор данных загружается каждый раз. - person chas; 10.03.2021

Удаление реактивной функции помогло.

options(shiny.maxRequestSize = 100*1024^2)
source("helpers.R")
load('04.Rdata')
data<-list("data"=data_results,"data_results_table"=data_results_table)
shinyServer(function(input, output,session) {
source("server2.R",local = TRUE)
source("server3.R",local = TRUE) 
})

И загрузка данных о

person chas    schedule 10.03.2021