Я создал приложение Shiny, которое использует переменную списка (для настройки меток), которая создается из файла Excel.Имя этой переменной refvar
refvar
создается в shinyServer()
в server.R и используется для создания элементов пользовательского интерфейса, которые отправляются в ui.R.refvar
также используется load.data()
.load.data()
определено в global.R и используется в shinyServer()
.
Странно то, что если я запускаю приложение вручную (кнопка «Запустить приложение» в RStudio или runApp () из консоли RStudio), то оноработает, хотя, если я помещаю shiny::runApp()
в файл .Rprofile, чтобы запустить приложение, как только я открываю свой проект RStudio, я получаю ошибку "ОШИБКА: объект 'refvars' not found" в браузере.
Вот (предположительно) соответствующий код
.Rprofile
shiny::runApp()
server.R
shinyServer(function(input, output) {
refvars <- read_excel('Labels.xlsx') %>% dplyr::select(1:2) %>% set_colnames(c('Var', 'Label')) %>% mutate_all(str_squish) %>% spread(Var, Label) %>% as.list
Data <- load.data()
output$UI.report.sel.text <- renderUI({helpText(refvars$report.sel.text)})
output$UI.daterange.sel.text <- renderUI({helpText(refvars$daterange.sel.text)})
#[...]
})
global.R
load.data <- function() {
tryCatch(read_excel("Report_data.xlsx"), error = function(e) file.choose()) %>%
rename(!!c(
Anno = refvars$year,
Mese = refvars$month,
Indagine = refvars$report,
Reparto = refvars$context,
Note = refvars$notes,
Problemi = refvars$problems,
Sforamenti = refvars$non.compliance,
Protocollo = refvars$id
)) %>%
mutate(
Data = ymd(paste(Anno, Mese, '1', sep = '-'))
)
}
ОБНОВЛЕНИЕ:
Я провел несколько экспериментов, вставив refvar
в global.R.Приложение теперь хорошо запускается из .Rprofile, но некоторые вещи не работают.Например, там, где должен быть ggplot, я получаю «ОШИБКА: объект 'title' not found», но на самом деле я не использую какой-либо title
объект.
Я пытался проверить состояние данных, которые я передал в ggplotчерез capture.output (str (Data)) и вывести его в ui.R через директиву uiOutput.Ошибка стала в том, что он мог найти функции str()
и capture.output()
;Пакет утилит не был загружен!
Так что я полагаю, что проблема в том, что runApp () из .Rprofile запускается слишком рано.Как я могу это исправить?