ismail duru
ismail duru

Reputation: 11

How To Display Data Selected Datasets' Feature With R Shiny

I want to display selected feature of selected data in R Shiny. To select data I use select input (with reactivity) , and to choose features of selected dataset use checkboxGroupInput.

I know there is some mistake in my code. Here is my code how can I act it?

    Server- Code
 Data_to_display <<- reactive({
    switch(input$Data,
           "dt_1" = Data1,
           "dt_2" = Data2)
  })

 output$DisplayData <- DT::renderDataTable({
      DT::datatable(Data_to_display(), filter="top")
    })

UI.Code
------

sidebarLayout( 
    sidebarPanel( 
      checkboxGroupInput("show_vars", "Gösterilecek özellikler:",
                         names(Data), selected = names(Data)),
      selectInput("Data", "Choose data:", choices =  c("dt_1","dt_2"), selected = "dt_1")
    ),

    mainPanel(
      DT::dataTableOutput("DisplayData") 
    )

Upvotes: 1

Views: 1155

Answers (1)

Hallie Swan
Hallie Swan

Reputation: 2764

Looks like you're calling a reactive input (Data) in the ui. To build dynamic UI that reacts to user input, you can create the UI element on the server and then output the element in the ui.

However, I'm not sure of your exact goal. If you'd like to hide/show columns in the datatable there is a DT extension (colvis) for exactly that purpose.

I've added two examples below -- one with dynamically rendered checkboxes and another with the DT extension for hiding/showing columns.


1) Dynamically created checkboxes:

    Data1 <- iris
    Data2 <- mtcars

    ui <- fluidPage(
        sidebarLayout( 
            sidebarPanel( 
                selectInput("Data", "Choose data:", 
                            choices =  c("dt_1","dt_2"), selected = "dt_1"),
                ## render dynamic checkboxes
                uiOutput("show_vars")
                ),

            mainPanel(
                DT::dataTableOutput("DisplayData")
            )
        )
    )

    server <- function(input, output) {

        Data_to_display <<- reactive({
            switch(input$Data,
                   "dt_1" = Data1,
                   "dt_2" = Data2)
        })

        ### create dynamic checkboxes
        output$show_vars <- renderUI({
            checkboxGroupInput("show_vars", "Gösterilecek özellikler:",
                               choices = names(Data_to_display()), 
                               selected = names(Data_to_display()))
        })

        output$DisplayData <- DT::renderDataTable({
            DT::datatable(Data_to_display(), filter="top")
        })
    }

    shinyApp(ui, server)

2) DT extension colvis:

Data1 <- iris
Data2 <- mtcars

ui <- fluidPage(
    sidebarLayout( 
        sidebarPanel( 
            selectInput("Data", "Choose data:", 
                        choices =  c("dt_1","dt_2"), selected = "dt_1")),
        mainPanel(
            DT::dataTableOutput("DisplayData")
        )
    )
)

server <- function(input, output) {

    Data_to_display <<- reactive({
        switch(input$Data,
               "dt_1" = Data1,
               "dt_2" = Data2)
    })

    ### hide/show columns with built-in DT extension
    output$DisplayData <- DT::renderDataTable({
        DT::datatable(Data_to_display(), filter = "top",
                      extensions = 'Buttons',
                      options = list(dom = 'Bfrtip', buttons = I('colvis')))
    })
}

shinyApp(ui, server)

Upvotes: 1

Related Questions