24

我正在尝试使用DT包为我闪亮的应用程序创建一个响应式数据表。我想提前隐藏某些列。例如:

library("shiny")
library("DT")
shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) {
    output$tbl = DT::renderDataTable(
      iris,extensions="Responsive"
    )
  }
)

这个输出给了我 5 列。它仅在我缩小页面时隐藏列。但是,我想提前隐藏最后 3 列,我只想每次都看到前两列。有没有办法做到这一点?

更新:

示例输出

在此处输入图像描述

4

2 回答 2

31

您可以使用 DT 选项或扩展名隐藏表中的列。

如果您希望它们提前隐藏但有一个按钮可以让它们再次可见,那么ColVis扩展程序应该很适合您:link

如果您只想隐藏,请添加以下选项(不记得我现在在哪里看到它的文档..)

options=list(columnDefs = list(list(visible=FALSE, targets=columns2hide)))
于 2015-09-06T21:36:25.190 回答
0

我有另一种我喜欢它的可读性的方式。但它并没有解决列编号的问题。

library("shiny")
library("DT")
library(magrittr)
columns2hide <- match('Sepal.Width', colnames(iris))
shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) {
    output$tbl = DT::renderDataTable(
      {
        dataTableProxy(outputId = 'tbl') %>%
          hideCols(hide = columns2hide)
        iris
      },
      extensions="Responsive"
    )
  }
)

dataTableProxy创建一个代理对象,您可以使用几个函数对其进行操作(请参阅 参考资料?dataTableProxy)。例如,当单击按钮时,它可以很方便地隐藏/显示/选择/添加/...表格的行和列。因为deferUntilFlush = TRUE默认情况下它会等待处理表,直到它的下一代。在这种情况下,这只是发生在下一行。

于 2020-08-14T21:06:44.817 回答