Shiny 中的 R 大型数据表显示

标签 r shiny datatables dt datatables-1.10

我试图在 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 中打开它时,它才会变得非常缓慢。我的问题是:

  1. 为什么会这样
  2. 如何在默认情况下只显示有限数量的列并可以选择显示其他列
  3. 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/

相关文章:

r - 从 R 中的时间戳获取年份

r - 如何在 Shiny 的 r 中并排放置多个图?

r - 部署可以在应用程序本身内部调用 runApp() 的 Shiny 应用程序(特别适用于 tabulizer 包)

r - 将多个文件从 Shiny 的应用程序上传到谷歌驱动器

重命名 Model.matrix 中的列名称

mysql - 解析 R 数据帧的 JSON 列

r - 将因子分数添加到原始数据集

datatables - 使用千位分隔符和字符串对数字进行排序

javascript - 使用数据表进行非表布局

javascript - 遍历每个表行并向其添加超链接