【问题标题】:Get selected columns in DT table获取 DT 表中的选定列
【发布时间】:2018-09-21 13:57:09
【问题描述】:

我正在开发一个闪亮的应用程序,用户可以在其中选择大数据集中的多个列来创建该数据集的子集。我使用包 DT 在闪亮的应用程序中很好地呈现表格。

我之前使用了 DT 包的 0.2 版,其中以下代码正在运行:

library("DT")
library("shiny")

ui <- fluidPage(
  DT::dataTableOutput('table1'),
  DT::dataTableOutput("table2")
)

server <- function(input, output) {
  output$table1 <- DT::renderDataTable({
    datatable(mtcars, extensions = 'Select', selection = 'none', options = list(ordering = FALSE, searching = FALSE, pageLength = 25, select = list(style = 'os', items = 'column')),
              callback = JS(
                "table.on( 'click.dt', 'tbody td', function (e) {",
                "var type = table.select.items();",
                "var idx = table[type + 's']({selected: true}).indexes().toArray();",
                "var DT_id = table.table().container().parentNode.id;",
                "Shiny.onInputChange(DT_id + '_columns_selected', idx);",
                "})"
              ))
  })

  output$table2 <- DT::renderDataTable({
    subset_table <- mtcars[,input$table1_columns_selected]
    datatable(subset_table)
  })
}

shinyApp(ui = ui, server = server)

不幸的是,这段代码不再工作了(我现在在 0.4 版本下)。 input$table1_columns_selected 不会呈现所选列的索引。 根据这个https://rstudio.github.io/DT/shiny.html,现在有一个选择多行的功能,但我不知道如何对列做同样的事情。

有什么想法吗? 非常感谢您的帮助!

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    我不确定您为什么需要使用回调参数来执行此操作。这是一个简化的方法 -

    library("DT")
    library("shiny")
    
    ui <- fluidPage(
      DT::dataTableOutput('table1'),
      DT::dataTableOutput("table2")
    )
    
    server <- function(input, output) {
      output$table1 <- DT::renderDataTable({
        datatable(mtcars, extensions = 'Select', selection = list(target = "column"), options = list(ordering = FALSE, searching = FALSE, pageLength = 25))
      })
    
      output$table2 <- DT::renderDataTable({
        subset_table <- mtcars[, input$table1_columns_selected, drop = F]
        datatable(subset_table)
      })
    }
    
    shinyApp(ui = ui, server = server)
    

    注意output$table1datatable 参数的变化。希望这就是您想要的。

    【讨论】:

      【解决方案2】:

      我已经测试了你的代码,它对我来说工作正常(见下图),我也在使用 DT 包版本 0.4。

      所以我的猜测是,它不是 DT 包问题,而是导致问题的全局配置中的其他问题。

      【讨论】:

      • 我将此配置用作可重现的示例,但在我的实际情况下,我得到了一个错误。如果仔细观察,您在第一个表中选择了 4 个变量,而第二个表中只剩下三个。也许这是唯一的区别,但这可能是导致我的应用崩溃的原因
      • 由于某种原因似乎存在滞后。选择一列,没有任何反应,选择第二列,它会绘制你的第一个选择,选择第三个,它会绘制你的第二个选择,等等。我可能建议也使用dplyr::select(mtcars, input$table1_columns_selected) 或添加drop = FALSE 以保留你的行名一个子集,这就是为什么在只选择 1 col 时会出现尺寸错误的原因,因为这会给你一个向量。 mtcars[, 1, drop = FALSE]
      猜你喜欢
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多