【问题标题】:downloadButton function in shiny dashboard not working闪亮仪表板中的下载按钮功能不起作用
【发布时间】:2017-08-23 06:42:45
【问题描述】:

当用户单击按钮时,我想将数据表输出写入 csv。我在 r 中为下载功能编写了以下代码

ui.r

tabItem(tabName = "output",
          h2("Resource Predictions"),
          fluidRow(
              box(
                width = 3, status = "info",solidHeader = TRUE,
                title = "QC Assignment",
                tableOutput("qc_assign")
            ),
              box(
                width = 9, status = "info",solidHeader = TRUE,
                title = "ITV Assignment",
                DT::dataTableOutput("itv_seq")
            )),

          fluidRow(
            downloadButton("downloadtable", "Download ITV assignment file",style="display: block; margin: 0 auto; width: 230px;color: blue;"))

    ),

我的 server.r 文件如下所示

qc_assignment <- reactive({
 . 
 .
 .
list(ITV_assign = itv_assign)

})


output$downloadtable <- downloadHandler(
itv_seq <- qc_assignment()[['ITV_assign']],
filename = function() {paste("ITV_assignement_",input$ves_arrv_date,".csv",sep="")},
content = function(file){ write.csv(itv_seq, file) }
)

当我点击Download ITV assignment file 按钮时,文件浏览器打开,它正在保存名称为downloadtable 的文件,没有.csv 扩展名。

我做错了什么?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    downloadHandler 已指定参数:

    downloadHandler(filename, content, contentType = NA, outputArgs = list())

    我猜 R 正试图将您的 itv_seq &lt;--Assignment 与其中一个重新定义的参数相匹配。这有效:

    output$downloadtable <- downloadHandler(
        filename = function() {    
             paste("ITV_assignement_",input$ves_arrv_date,".csv",sep="")
        },
        content = function(file){
             itv_seq <- qc_assignment()[['ITV_assign']],
             write.csv(itv_seq, file)
        }
    )
    

    您可以添加参数contentType = 'text/csv',但这是从您提供的扩展中猜到的。

    【讨论】:

    • 我按照你的建议做了,但仍将其保存为downloadtable,没有.csv 扩展名
    • 这个例子https://shiny.rstudio.com/reference/shiny/latest/downloadHandler.html 对你有用吗?
    • 以上链接不存在。 404 not found
    • 我认为它工作正常。我假设您正在使用 RStudio 启动应用程序。在这种情况下,它会打开一个文件浏览器,并且文件的名称将与您的函数相同,但没有扩展名。但是,如果您在运行应用程序时打开的页面顶部使用Open in Browser 选项,它现在应该在网络浏览器中打开应用程序。如果您现在尝试下载,它应该可以使用指定的文件名和扩展名按预期工作。