Wallace
Wallace

Reputation: 360

Using input$ to call the dataset

Suppose I have 2 columns in my dataset, and I want to output out a histogram and summary depending on which column we are on, currently I have 2 if statements per output checking what the input is equal to.

ui <- fluidPage(
  titlePanel("First iteration"),
  sidebarLayout(
    sidebarPanel("Sidebar Panel",
    selectInput("typetoshow", "Choose what you want to display", 
                choices = c("pts", "upts"))             
                 ),
    mainPanel("main panel",
              plotOutput("hist"),
              verbatimTextOutput("sum")
              )
  )
)

server <- function(input, output){
  output$hist <- renderPlot({
    if (input$typetoshow == "pts"){
      hist(data$pts)
    }
    if (input$typetoshow == "upts"){
      hist(data$upts)
    }
  })
  output$sum <- renderPrint({
    if (input$typetoshow == "pts"){
      summary(data$pts)
    }
    if (input$typetoshow == "upts"){
     summary(data$upts)
    }
  })
}

I tried doing

hist(data$input$typetoshow)

But it is giving me an error saying 'x must be numeric' in the histogram and shows NULL for the output summary, is there any way to do this without making many if statements? I am going to be dealing with 10+ columns at one point so I want the code to be neat.

Upvotes: 4

Views: 126

Answers (2)

Pedro Alencar
Pedro Alencar

Reputation: 1089

You can make it simpler with dplyr::select:

server <- function(input, output){
  output$hist <- renderPlot({
    hist(unlist(dplyr::select(data, input$typetoshow)))
  })
  output$sum <- renderPrint({
    summary(dplyr::select(data, input$typetoshow))

    })
}

Upvotes: 0

akrun
akrun

Reputation: 887951

We can use req at the top and then use [[ to subset the dataset column based on the value from 'input$typetoshow'

server <- function(input, output){
  output$hist <- renderPlot({
    req(input$typetoshow)
    
    
      hist(data[[input$typetoshow]])
   
  })
  output$sum <- renderPrint({
       req(input$typetoshow)
    
      summary(data[[input$typetoshow]])
    
  })

Upvotes: 1

Related Questions