有光泽的dowloadHandler(错误:替换长度为零)

时间:2016-05-12 14:52:17

标签: r shiny shinydashboard

我正在制作一些简单闪亮的应用程序,它允许用户下载R生成的csv文件,但在使用闪亮的下载按钮时遇到一些困难

这是我的代码示例 在UI方面,

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)
    } 
  )
}

但这会导致错误消息“ERROR:replacement has length zero” 我知道这是因为一些空值被发送到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 个答案:

没有答案