按钮扩展可下载所有数据或仅下载可见数据

时间:2018-05-24 11:59:24

标签: r shiny dt

使用DT包的按钮扩展,有没有办法指定按钮下载(1)所有数据提供数据,或(2)只有可见页面上的数据。

以下是documentation的示例。

datatable(
  iris, extensions = 'Buttons', options = list(
    dom = 'Bfrtip',
    buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
  )
)

3 个答案:

答案 0 :(得分:11)

正如@divibisan所说,一种选择是使用server的{​​{1}}参数来控制下载按钮将仅下载当前行还是全部行。

如果您想要一个下载按钮,那将很好用。但是,如果要始终显示两个按钮,其中一个下载当前页面,一个下载整个数据集,则可以使用以下代码:

renderDT()

答案 1 :(得分:3)

您正在寻找modifiers: page: selected。这是一个有效的例子

ui <- fluidPage(
  title = "Examples of DataTables",
  sidebarLayout(
    mainPanel(
      tabsetPanel(
        id = 'dataset',
        tabPanel("diamonds", DT::dataTableOutput("mytable1"))
      )
    )
  )
)

server <- function(input, output) {

  # choose columns to display
  diamonds2 = diamonds[sample(nrow(diamonds), 1000), ]
  output$mytable1 <- DT::renderDataTable({
    DT::datatable(diamonds2,
                  extensions = 'Buttons',
                  options = list(
                    dom = 'Bfrtip',
                    buttons = 
                      list(
                        list(
                        extend = 'csv',
                        buttons = c('csv'),
                        exportOptions = list(
                          modifiers = list(page = "current")
                        )
                      ))
                    )
                  )
  })

}

shinyApp(ui, server)

希望这有帮助!

答案 2 :(得分:2)

请参阅此答案:DT Buttons: download button with scroller downloads only few rows

按钮是导出所有数据还是仅导出可见数据取决于server函数调用中的DT::renderDT参数。如果server=FALSE,则按钮将导出表格中的所有数据,而如果server=TRUE,则只会导出可见数据。

您可以使用变量设置server参数,使其成为可选择的选项。

output$table <- DT::renderDT(server = input$download_all, {
    DT::datatable( ... )
}

您可能希望查看的另一个选项是exportOptions: modifiers: selected选项,该选项确定是仅下载选定的行(默认值)还是所有行。您可以在此处阅读该选项:https://datatables.net/extensions/buttons/examples/print/select.html

请注意,如果您的数据表非常大,您的用户可能会使用server=FALSE遇到性能和内存问题。