Блестящий dowloadHandler (ОШИБКА: длина замены равна нулю)
Я работаю над некоторым просто блестящим приложением, которое позволяет пользователю загружать сгенерированный R файл CSV, но сталкиваются с некоторыми трудностями при использовании блестящей кнопки загрузки
Вот мой пример кода на стороне пользовательского интерфейса,
body <- dashboardBody(
tabItem("output1",
fluidRow(
infoBox(title = "Download Output File", color = "lime", fill = TRUE, icon = icon("cloud-download"), width = 6, uiOutput(outputId = "downloadAction")
)
)
)
))
На стороне сервера мои вычисления возвращают список со статусом false или true, а также фрейм данных необходимо поместить в файл загрузки
server <- function(input, output) {
calculation <- reactive({...})
output$downloadAction <- renderUI({
cal <- calculation()
if (!cal$status) return()
downloadButton(outputId = "downloadFiles", label = "Download Available")
})
output$downloadFiles <- downloadHandler(
filename = function() {
# Create download data file
filename <- paste0("data-", Sys.Date(), "-", floor(runif(1, 1, 10000)), ".csv")
while (file.exists(filename)) {
filename <- paste0("data-", Sys.Date(), "-", floor(runif(1, 1, 10000)), ".csv")
}
},
content = function(file) {
write.csv(calculation()$data, file)
}
)
}
Но это приводит к сообщению об ошибке "ОШИБКА: длина замены равна нулю". Я знаю, что это происходит из-за того, что в R отправлено какое-то нулевое значение, которое ожидает ненулевое значение, но не имеет ни малейшего представления, что является основной причиной и как ее исправить. Спасибо за ваши предложения
#Я думаю, что я выяснил проблему внутри функции имени файла, вы не можете присвоить строку переменной
filename = function() {
# Create download data file
filename <- paste0("data-", Sys.Date(), "-", floor(runif(1, 1, 10000)), ".csv")
while (file.exists(filename)) {
filename <- paste0("data-", Sys.Date(), "-", floor(runif(1, 1, 10000)), ".csv")
}
},
content = function(file) {
write.csv(calculation()$data, file)
}
)
Я поменял на
filename = function() {
# Create download data file
paste0("data-", Sys.Date(), "-", floor(runif(1, 1, 10000)), ".csv")
},
content = function(file) {
write.csv(calculation()$data, file)
}
Это работает сейчас. Я предполагаю, что Shiny должен быть в состоянии обработать конфликт имени файла, так как он всегда создает временное имя файла, так что нет необходимости обнаруживать конфликт имени файла в коде?