Добрый день, заранее спасибо, что нашли время прочитать мой вопрос. В моем приложении Shiny я пытаюсь создать список реактивных объектов для записи в единую книгу Excel для загрузки пользователем. Я смог использовать части ответов из других постов, чтобы повторить мою проблему, и я довольно близко подошел к решению. Однако, хотя приведенный ниже пример использует список фреймов данных, таких как mtcars, iris и т. Д. c, я пытаюсь использовать реактивные наборы данных, такие как datasetInput1 (), datasetInput2 () и др. c.
shinyApp(
ui = fluidPage(
downloadButton("downloadExcelSheet", "Download Excel Workbook with Multiple Sheets")
),
server = function(input, output) {
#### Write an Excel workbook with one sheet per dataframe ####
output$downloadExcelSheet <- downloadHandler(
filename = function() {
"excelWorkbook.xlsx"
},
content = function(file) {
# write workbook and first sheet
write.xlsx(mtcars, file, sheetName = "mtcars", append = FALSE)
# add other sheets for each dataframe
listOtherFiles <- list(iris = iris,
airquality = airquality,
sleep = sleep)
for(i in 1:length(listOtherFiles)) {
write.xlsx(listOtherFiles[i], file,
sheetName = names(listOtherFiles)[i], append = TRUE)
}
}
)
Когда я пытаюсь использовать эти реактивные объекты в приведенном ниже примере, я могу успешно загрузить данные, когда в списке только один набор данных. Например, ниже работает, но как только я начинаю добавлять больше в список listOtherFiles, например listOtherFiles <- list (datasetInput2 (), datasetInput3 ()), я получаю сообщение об ошибке. </p>
shinyApp(
ui = fluidPage(
downloadButton("downloadExcelSheet", "Download Excel Workbook with Multiple Sheets")
),
server = function(input, output) {
datasetInput1 <- reactive({
data %>%
filter(sub_date == input$date, app_type == input$type)
})
datasetInput2 <- reactive({
data2 %>%
filter(sub_date == input$date, app_type == input$type)
})
output$downloadExcelSheet <- downloadHandler(
filename = function() {
"datasetOutput.xlsx"
},
content = function(file) {
# write workbook and first sheet
write.xlsx(datasetInput1(), file, sheetName = "dataset1", append = FALSE)
# add other sheets for each dataframe
listOtherFiles <- list(datasetInput2())
for(i in 1:length(listOtherFiles)) {
write.xlsx(listOtherFiles[i], file,
sheetName = names(listOtherFiles)[i], append = TRUE)
}
}
)