Блестящий 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 должен быть в состоянии обработать конфликт имени файла, так как он всегда создает временное имя файла, так что нет необходимости обнаруживать конфликт имени файла в коде?

0 ответов

Другие вопросы по тегам