Search code examples
rshinydt

Using filtered datatables in shiny


I am new to shiny but was wondering if there is any way to store a filtered datatable (using the column filters) in a R object so that this filtered data can be passed to histogram and plot functions.

EDIT May 7, 15: Including the author's expanded explanation from comments

I want the table to get filtered using the built-in column filters and then want the plot to automatically adjust. I've already tried the DT package but I don't like very much of the column filters that come with this package as it is not possible (I think) to remove the filters from a subset of the columns in the table


Solution

  • Just building up on @JasonAizkalns's example, you can hide some of the built-in column filters using jQuery. for example here the first two are hidden:

    library(shiny)
    library(DT)
    
    shinyApp(
      ui = fluidPage(dataTableOutput('tbl'),
                     plotOutput('plot1')),
      server = function(input, output) {    
        output$tbl = renderDataTable({
          datatable(iris, filter="top",options = list(lengthChange = FALSE),callback=JS("
               //hide column filters for the first two columns
              $.each([0, 1], function(i, v) {
                    $('input.form-control').eq(v).hide()
                  });"))
        })
        output$plot1 = renderPlot({
          filtered_data <- input$tbl_rows_all
          hist(iris[filtered_data, "Sepal.Length"])
        })
      }
    )