获取DT表中的选定列

时间:2018-09-21 13:57:10

标签: r shiny dt

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

我以前使用的是DT软件包的0.2版,以下代码在起作用:

- job_name: 'Kubernetes'
scheme: https
tls_config:
  insecure_skip_verify: true
bearer_token: %VeryLongLine%
kubernetes_sd_configs:
- api_server: https://%ClusterName%.hcp.westeurope.azmk8s.io
  tls_config:
    insecure_skip_verify: true
  role: node
  namespaces:
    names: [default]

不幸的是,此代码不再起作用(我现在的版本为0.4)。 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) 不会呈现所选列的索引。 根据此https://rstudio.github.io/DT/shiny.html,现在有一种功能可以选择多行,但我不知道如何对列进行相同的操作。

有什么主意吗? 非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

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

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)

请注意datatableoutput$table1参数中的更改。希望这就是您想要的。

答案 1 :(得分:0)

我已经测试了您的代码并对其工作正常(请参见下图),并且我还使用了DT软件包版本0.4。

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

enter image description here