Здесь может быть один подход. Вы можете использовать reactiveFileReader
для периодической загрузки файла данных, который часто обновляется (вы можете указать частоту опроса). Затем используйте updatePickerInput
для обновления ввода при изменении данных.
У меня не было доступа к my_choices
, поэтому я прокомментировал это.
library("shiny")
library("shinyWidgets")
library("openxlsx")
# my_choices <- c("2018Q1","2018Q2","2018Q3", "2018Q4", "2019Q1", "2019Q2")
ui <- fluidPage(
pickerInput(
inputId = "id",
label = "SELECT PERIOD:",
choices = NULL,
selected = NULL,
multiple = TRUE,
options = list(
`actions-box` = TRUE, size = 15, `selected-text-format` = "count > 3"
)#,
#choicesOpt = list(
# content = stringr::str_trunc(my_choices, width = 75)
#)
),
verbatimTextOutput(outputId = "res")
)
server <- function(input, output, session) {
fileData <- reactiveFileReader(1000,
session,
filePath = 'C:/Users/MyName/OneDrive/data.xlsx',
readFunc = read.xlsx)
output$res <- renderPrint(input$id)
observe({
updatePickerInput(session, "id", choices = fileData()$selection)
})
}
shinyApp(ui = ui, server = server)
Редактировать
Если вам нужно только загрузить файл при запуске приложения вам не понадобится reactiveFileReader
:
observe({
updatePickerInput(session, "id", choices = openxlsx::read.xlsx(xlsxFile =
"C:/Users/MyName/OneDrive/data.xlsx")$selection)
})
В качестве альтернативы, вы можете загрузить файл в кадр данных вне ui
и ссылаться на столбец dataframe selection
в вашем pickerInput
.