我正在处理超过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')
)
)
我尝试了不同的方法:
在选项列表中更改scrollY =
... - >它正在工作但scrollY
的数量必须很大才能实际显示所有数据行,以便可以完全下载 - >不好的方法,因为我的数据来自数据库,我获得不同的行数加上它使应用程序极其缓慢
使用pageLength选项:pageLength = ..., lengthMenu=c(..,..,..,..)
但是根本不显示选择选项......
我有什么想法可以解决这个问题?
downloadHandler()
方法,但我更愿意通过 DT
来实现,因为可用的扩展程序可以提供优雅和优雅的方式,允许一次下载不同格式的数据,如pdf,excel,csv和print。 **我已经看到了同样的问题:
Download button downloads only 145 rows in DataTables with Scroller
但是DT
package
提前致谢
答案 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)
)
})
}
)