javascriptjqueryrshinydt

How to pre-select rows in Shiny DT datatables


I'm using Shiny (0.12.0) with DT (0.0.65) for row-selections in this Shiny datatable. I want to pre-select the first 5 rows. I have tried:

callback JS:

output$x1 = DT::renderDataTable({
    datatable(cars,
        rows = $("#x1 tbody tr");
        $(rows).slice(0,5).each(function() {
            $(this).click();
        });
    )
})

Solution

  • This feature has been added to DT (>= 0.1.3). Examples:

    library(shiny)
    if (packageVersion('DT') < '0.1.3') devtools::install_github('rstudio/DT')
    library(DT)
    shinyApp(
      ui = fluidPage(
        fluidRow(
          h1('Client-side processing'),
          DT::dataTableOutput('x1'),
          h1('Server-side processing'),
          DT::dataTableOutput('x2')
        )
      ),
      server = function(input, output, session) {
        output$x1 = DT::renderDataTable(
          iris, server = FALSE,
          selection = list(mode = 'multiple', selected = c(1, 3, 8, 12))
        )
        output$x2 = DT::renderDataTable(
          iris, server = TRUE,
          selection = list(mode = 'multiple', selected = rownames(iris)[c(1, 3, 8, 12)])
        )
      }
    )