我试图在 Shiny 的应用程序中显示一个相对较大的数据表。表格的尺寸为 7000x30。 Chrome 中的性能非常缓慢,所以我添加了“Scroller”扩展来限制渲染,但这没有帮助。似乎是导致问题的列数过多,而不是行数过多。我还尝试使用 colvis
扩展,但该按钮提供了一个不可滚动的列表和 30 列,这是行不通的。我还尝试使用可见选项隐藏一些列,但这没有用。
例子如下:
data = as_tibble(matrix(runif(200000), ncol=30))
data %>%
DT::datatable(filter = 'top', extensions = c('Buttons', 'Scroller'),
options = list(scrollY = 650,
scrollX = 500,
deferRender = TRUE,
scroller = TRUE,
# paging = TRUE,
# pageLength = 25,
buttons = list('excel',
list(extend = 'colvis', targets = 0, visible = FALSE)),
dom = 'lBfrtip',
fixedColumns = TRUE),
rownames = FALSE)
奇怪的是,Rstudio 查看器显示了数据表并且没有问题。只有当我将文档作为 Shiny 的文档运行并在 Chrome 中打开它时,它才会变得非常缓慢。我的问题是:
- 为什么会这样
- 如何在默认情况下只显示有限数量的列并可以选择显示其他列
colvis
有更好的按钮吗?如果列列表超过页面长度,我无法访问那些隐藏的列来打开或关闭它们。
最佳答案
迟钝是什么意思?
我运行了它,在速度方面我觉得一切都还不错。
library(shiny)
library(shinydashboard)
library(DT)
####/UI/####
header <- dashboardHeader()
sidebar <- dashboardSidebar()
body <- dashboardBody(
DT::dataTableOutput("test")
)
ui <- dashboardPage(header, sidebar, body)
####/SERVER/####
server <- function(input, output, session) {
data <- as_tibble(matrix(runif(200000), ncol=30))
output$test <- DT::renderDataTable({
DT::datatable(
data,
filter = 'top', extensions = c('Buttons', 'Scroller'),
options = list(scrollY = 650,
scrollX = 500,
deferRender = TRUE,
scroller = TRUE,
# paging = TRUE,
# pageLength = 25,
buttons = list('excel',
list(extend = 'colvis', targets = 0, visible = FALSE)),
dom = 'lBfrtip',
fixedColumns = TRUE),
rownames = FALSE)
})
}
shinyApp(ui, server)
您可能希望从 Options = ()
中删除 'scroller'
,因为对于那么多行,您可能希望将其分成几页。此外,您可以尝试通过在其中放置 Server = TRUE
来进行表服务器处理,这将使它同时处理每个页面而不是整个数据集。
关于Shiny 中的 R 大型数据表显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59681856/