If you use client side processing, you can accomplish this with the input object input[["tablename_rows_all"]]
. (append _rows_all
to the name of the datatable output slot)
The _rows_all
object will return the row indices of your data frame. You can use that within your downloadHandler
to subset the data frame when the download is initiated.
library(shiny)
library(DT)
shinyApp(
ui =
shinyUI(
fluidPage(
DT::dataTableOutput("dt"),
p("Notice that the 'rows_all' attribute grabs the row indices of the data."),
verbatimTextOutput("filtered_row"),
downloadButton(outputId = "download_filtered",
label = "Download Filtered Data")
)
),
server =
shinyServer(function(input, output, session){
output$dt <-
DT::renderDataTable(
datatable(mtcars,
filter = "top"),
server = FALSE
)
output$filtered_row <-
renderPrint({
input[["dt_rows_all"]]
})
output$download_filtered <-
downloadHandler(
filename = "Filtered Data.csv",
content = function(file){
write.csv(mtcars[input[["dt_rows_all"]], ],
file)
}
)
})
)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…