我想生成数据并自动下载。我创建了一个“生成数据”按钮。预期当我单击此按钮时,它将生成数据并自动单击“下载”按钮,因此生成的数据将自动下载。
library(shiny)
library(shinyalert)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
useShinyalert(),
actionButton("gener.data", "Generate Data"),
downloadButton("downloadData")
)
server <- function(input, output, session) {
observeEvent(input$gener.data, {
test_data = data.frame( No=c(1,2,3),Name=c("R","RR","RRR") )
test_data2 = data.frame( No=c(3,2,1),Name=c("RRR","RR","R") )
output$downloadData <- downloadHandler(
filename = function() {
paste("dataset-", ".zip", sep="")
},
content = function(file) {
tmpdir <- tempdir()
contain_filename <- c( "test.csv", "test2.rds" )
write.csv( test_data , contain_filename[1] )
saveRDS( test_data2, contain_filename[2] )
zip(zipfile=file, files= contain_filename )
},contentType = "application/zip"
)
#auto click the downloadData button
runjs("$('#downloadData')[0].click();")
#show message
shinyalert(
title = 'Compelete!',type='success',
confirmButtonText = "OK"
)
})
}
shinyApp(ui, server)
实际上,当我单击“生成数据”按钮时,它下载的是html文件,而不是预期的数据。似乎在生成输出数据之前已执行了js代码。
生成输出后,如何自动单击“下载数据”?或者如何在输出更改后自动单击“下载数据”?