按钮:带滚动条的下载按钮仅下载几行

11

我正在处理超过 100,000 行的表格,并使用 DT 包(开发版本 0.1.56)在 Shiny 应用程序中可视化。此外,我还使用了 DT 扩展,例如 Buttons,以便以不同格式下载数据。然而,当 Scroller 扩展被激活时,我只能下载少量行(而不是所有数据)。

样例代码:

library("shiny")
library("DT")

shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) {
    output$tbl = DT::renderDataTable(
      iris,extensions=c("Buttons",'Scroller'),options = list(dom = 'Bfrtip',
                                               buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),scrollY = 50,
                                               scroller = TRUE
      ))
  }
)

另外,如果我在R中仅运行代码的这一部分并在查看器中获取数据表,我可以复制等所有行,这怎么可能呢?

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

我已经尝试了不同的方法:

  1. 更改选项列表中的 scrollY = ... --> 它能够工作,但是必须将 scrollY 的数量设置得很大才能实际显示所有数据行,因此可以完全下载 --> 不是一个好方法,因为我的数据来自数据库,而且我获得的行数不同,并且它使应用程序非常慢

  2. 使用 pageLength 选项:pageLength = ..., lengthMenu=c(..,..,..,..)

然而,选择的选项根本没有显示...

有什么想法可以解决这个问题吗?

  • 我知道 downloadHandler() 方法,但是 我更倾向于通过 DT 解决,因为可用的扩展提供了一种漂亮而优雅的方式,可以同时下载不同格式的数据,如pdf、excel、csv和打印。

**我已经看过相同的问题:

Download button downloads only 145 rows in DataTables with Scroller

但它并没有在 DT 包的意义上得到回答

预先感谢


5
如果在DT::renderDataTable中加入server=FALSE会发生什么? - Carl
嗨,卡尔,实际上那个完美地运作了!谢谢!如果您将其发布为答案,我会立即接受它。 - Mal_a
2个回答

16

问题在于当设置 server=TRUE 时,只有显示的数据被发送到客户端。将 server=FALSE 设置为在客户端中渲染所有 DT 相关内容,这样所有数据都在那里。


当我使用 server = FALSE 时,我会遇到这个错误:DataTables 警告:table id=DataTables_Table_0 - Invalid JSON response。有关此错误的更多信息,请参见 http://datatables.net/tn/1。 - AmData

11

确实是 server = TRUE 做到了这一点。

由于有些人可能会将参数放在错误的位置,因此这里提供代码。

library("shiny")
library("DT")

shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) {
    output$tbl = DT::renderDataTable(server = FALSE,{
      DT::datatable(iris,
                    extensions=c("Buttons",'Scroller'),
                    options = list(dom = 'Bfrtip',
                                   buttons = c('copy', 'csv', 
                                               'excel', 'pdf', 
                                               'print'),
                                   scrollY = 50,
                                   scroller = TRUE)
      )
    })
  }
)

当我使用 server = FALSE 时,我会遇到这个错误:DataTables 警告:table id=DataTables_Table_0 - Invalid JSON response。有关此错误的更多信息,请参见 datatables.net/tn/1。 - AmData

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接