Как реализовать R Shiny downloadHandler с переменной contentType? - PullRequest
0 голосов
/ 05 июня 2019

Согласно документам , downloadHandler должен принимать contentType в виде строки.Поскольку contentType не является константой, я пытаюсь передать переменную или реактив.Но приложение завершается ошибкой, когда contentType не является строго строкой.Как я мог передать значение переменной?

Я пытался function(){}, reactive, eventReactive.Что меня смущает, так это то, что он прекрасно работает для filename = function(){}.

ui <- fluidPage(
  downloadLink("downloadData", "Download")
)

server <- function(input, output) {
  # Our dataset
  data <- mtcars

  output$downloadData <- downloadHandler(
    filename = function() {
      paste("data-", Sys.Date(), ".csv", sep="")
    },
    content = function(file) {
      write.csv(data, file)
    },
    contentType = function() {
      "text/csv"
    }
  )
}

shinyApp(ui, server)

. В этом случае сообщение об ошибке is.na() applied to non-(list or vector) of type 'closure' и файл загружен неправильно (server error).

1 Ответ

1 голос
/ 05 июня 2019
ui <- fluidPage(
    radioButtons("csvs", label = "Type to download", choices = c(".txt", ".csv"), selected = ".csv"),
    downloadLink("downloadData", "Download")
)

server <- function(input, output) {
    # Our dataset
    data <- mtcars

    output$downloadData <- downloadHandler(
        filename = function() {
            paste("data-", Sys.Date(), input$csvs, sep="")
        },
        content = function(file) {
            write.csv(data, file)
        }
    )
}

shinyApp(ui, server)

Более простой и удобный способ - позволить пользователю выбрать его с помощью radioButton

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...