Получить выбранные столбцы в таблице DT

Я разрабатываю блестящее приложение, в котором пользователь может выбрать несколько столбцов в большом наборе данных, чтобы создать подмножество этого набора данных. Я использую пакет DT, чтобы красиво отобразить таблицу в блестящем приложении.

Ранее я использовал версию 0.2 пакета DT, где работал следующий код:

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 теперь есть функциональность для выбора нескольких строк, но я не могу понять, как сделать то же самое со столбцами.

Любая идея? Большое спасибо за Вашу помощь!

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 = 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)

Обратите внимание на изменение в datatable аргументы в output$table1, Надеюсь, это то, что вы искали.

Я проверил ваш код и он работает нормально для меня (см. Рисунок ниже), и я также использую версию DT пакета 0.4.

Поэтому я предполагаю, что проблема связана не с DT-пакетом, а с чем-то другим в вашей глобальной конфигурации.

введите описание изображения здесь

Другие вопросы по тегам