Shiny中展示大数据表格的方法(R语言)

3
我正在尝试在Shiny应用程序中显示一个相对较大的DataTable。表格的尺寸为7000x30。在Chrome中的性能非常差,因此我添加了“滚动条”扩展来限制渲染,但没有起到作用。似乎是列数过多导致了问题,而不是行数过多。我还尝试使用colvis扩展,但该按钮会提供一个不可滚动的列表,对于30列,这种方法行不通。我还尝试使用visible选项隐藏一些列,但也没有起到作用。
以下是示例:
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 查看器可以显示数据表格并且正常运作。只有当我将文档作为闪亮文档运行并在 Chrome 中打开时,它才变得非常缓慢。我的问题是:

  1. 为什么会发生这种情况?
  2. 如何默认只显示有限数量的列,并具有显示其他列的选项?
  3. 如果列的列表超过页面长度,是否有更好的 colvis 按钮?我无法访问那些隐藏列以切换它们的状态。
1个回答

2

你说的"sluggish"是什么意思?

我运行了它,就速度而言,一切看起来都很正常。

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来使表格服务器处理,这将使其逐页处理而不是一次处理整个数据集。

你试过用Chrome打开它吗?我做了 Server = TRUE(默认情况下是这样的)。我认为 scroller 的作用是通过在滚动时加载数据来允许大型数据集的滚动视图。因此,您不需要按页面分割它。另外,当我减少列数时,我没有问题,问题出在列而不是行。 - Courvoisier
是的,在Chrome中运行,我的端没有问题。当滚动时会有一两秒钟的“处理中...”,但我认为这是可以接受的。 - Kevin

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