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

时间:2016-07-20 09:24:11

标签: r shiny dt

我正在处理超过100 000行的表并使用DT包(开发版本0.1.56 )在Shiny App中对其进行可视化。

此外,我使用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(..,..,..,..)

  3. 但是根本不显示选择选项......

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

    • 我知道 downloadHandler()方法,但我更愿意通过 DT来实现,因为可用的扩展程序可以提供优雅和优雅的方式,允许一次下载不同格式的数据,如pdf,excel,csv和print。

    **我已经看到了同样的问题:

    Download button downloads only 145 rows in DataTables with Scroller

    但是DT package

    的含义没有回答

    提前致谢

2 个答案:

答案 0 :(得分:8)

问题是当server=TRUE时,只有正在显示的数据被发送到客户端。设置server=FALSE会在客户端中呈现所有DT内容,因此所有数据都在那里。

答案 1 :(得分:4)

这确实是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)
      )
    })
  }
)