R Shiny - создать глобальный фрейм данных при запуске приложения

Я создаю блестящее приложение, и мне нужно перестраивать фрейм данных, который анализирует файл json каждый раз, когда приложение открывается (так как файл json изменится). Затем функции в приложении должны получить доступ к этому фрейму данных. Помещение кода прямо перед server.R фактически не создает фрейм данных. Другим способом было бы создать функцию, которая создает фрейм данных, и вызывать эту функцию каждый раз, когда мне нужен фрейм данных, но это воссоздает фрейм данных каждый раз, когда мне это нужно.

Есть ли способ создать фрейм данных один раз и сохранить его в имени переменной, к которому могут обращаться функции в остальной части приложения при необходимости?

Прямо сейчас мой код в server.R следует этой структуре ниже. Однако здесь цикл for, который заполняет myDF, никогда не вызывается. С другой стороны, я не хочу помещать это в функцию, которая вызывается каждый раз, когда мне нужен myDF, воссоздая ее каждый раз. Я просто хотел бы создать myDF при запуске приложения и сохранить его как myDF, чтобы я мог его использовать.

json_file <- "file.json"
json_data <- fromJSON(json_file)
myDF <- as.data.frame(ncol = ..., nrow = ...) #creates an empty data frame myDF

for (b in field_names) {
    #code that fills in myDF
}

myFunc <- function(inputs) {
    #a function that uses myDF
}

shinyServer(function(input, output, session) {

  output$out1 <-renderText({
      myFunc(input$inputs)
  })
}

1 ответ

Решение

Поместите следующее в файл с именем global.R в каталоге вашего приложения (так же, как server.R а также ui.R), он будет запущен один раз при инициализации приложения.

json_file <- "file.json"
json_data <- fromJSON(json_file)
myDF <- as.data.frame(ncol = ..., nrow = ...) #creates an empty data frame myDF

for (b in field_names) {
    #code that fills in myDF
}
Другие вопросы по тегам