我正在尝试使用从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"))
))))
答案 0 :(得分:1)
通过R studio在本地运行Shiny Application时,程序将不会定义设置的文件类型。您会注意到,一旦应用程序部署或在浏览器中运行,指定的文件格式就位,因此可以解决此问题。
要在本地运行时下载.csv,只需在文件名中包含文件名即可指定该文件名,例如当提示通过文件浏览器进行保存时,data.csv
。
请注意,在本地下载时,在代码内的文件名中指定.csv不够,您必须手动输入。同样,此问题在部署或在浏览器中运行时已得到解决。