将数据表下载为CSV

时间:2018-06-25 17:30:36

标签: r csv download shiny dt

我正在尝试使用从Shiny到CSV的修改数据下载数据表。该应用程序运行后,我可以上传我的数据,并创建数据表,但是当我尝试下载它时,它不会以csv的形式下载。有一个文件正在下载,但没有列出文件格式,因此无法打开。与下载相关的代码有问题吗?

在server.R中下载代码

ObjectId

ui.R中的下载按钮声明

server <- function(input, output, session) {
  observe({
    file1=input$file1
    if (is.null(file1)){
      return(NULL)
    }
    df<-read.csv(file1$datapath, fileEncoding = "UTF-8-BOM")
    df$FAIL<-ifelse(df$OPERATION_STATUS %in% "FAIL",1,0)
setDT(a)
a[,group_i := as.Date(DATE) >= Sys.Date()-30]
dt<-(a[, .(
  "Overall Percent" = round(sum(OPERATION_STATUS == "FAIL") / .N * 100, 2),
  "30 Day Percent" = round(sum(OPERATION_STATUS[group_i] == "FAIL") / sum(group_i) * 100, 2),
  "Percent Change" = round((sum(OPERATION_STATUS[group_i] == "FAIL")/sum(group_i) / (sum(OPERATION_STATUS == "FAIL")/.N)*100), 2)),
  keyby = .("Area" = CRIT_CODE)])
output$tab<-DT::renderDataTable({
  datatable(dt, options=list(pagelength=30, lengthMenu=c(30,50)), rownames=FALSE, server=FALSE) %>% 
  formatStyle("Percent Change", color=styleInterval(100, c("black","red")))
})

output$dltab<-downloadHandler(
    filename=function(){
        paste("Fail Rate Summary-", Sys.Date(), ".csv", sep="")},
    content=function(file){
        write.csv(dt, file)
    }
)

样本数据

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput("file1", "Choose CSV File",
                accept=".csv"),
      width=3
    ),
    mainPanel(
      tabsetPanel(
        tabPanel(
          "Percent Fails", 
          DT::dataTableOutput("tab"), 
          downloadButton("dltab", "Download"))
  ))))

1 个答案:

答案 0 :(得分:1)

通过R studio在本地运行Shiny Application时,程序将不会定义设置的文件类型。您会注意到,一旦应用程序部署或在浏览器中运行,指定的文件格式就位,因此可以解决此问题。

要在本地运行时下载.csv,只需在文件名中包含文件名即可指定该文件名,例如当提示通过文件浏览器进行保存时,data.csv

请注意,在本地下载时,在代码内的文件名中指定.csv不够,您必须手动输入。同样,此问题在部署或在浏览器中运行时已得到解决。