Search code examples
ramazon-ec2shinyshiny-server

R Shiny: Error in max - min : non-numeric argument to binary operator


I am trying to create a simple shiny app for plotting histogram inside rstudio running on Amazon ec2 for my result data stored as .RData file. I have double checked everything. It looks fine. I have also checked the data types: all are numeric.

My codes:

ui.R

    # shiny plots on top_docs data
library(shiny)
shinyUI(fluidPage(
 # Header title
  titlePanel(title = h4("Top doctors plots - a histograms", align = "center")),

  # Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
sliderInput(
selectInput("var", "1, Select the variables from top doc summary file", 
choices =c( "service_total" = 1, 
              "ben_total" = 2,
              "payment" = 3, 
              "charged" = 4, 
              "allowed" = 5, 
              "unique_services_per_patient" = 6, 
              "duplicates_per_service" = 7, 
              "services_per_patient" = 8), selected= 1 ),
        br(),
        sliderInput("bins", "2, Select the number of BINs for histogram", min = 5, max = 40, value=20),
        br(),
        radioButtons("color", "3, Select the color of histogram", choices =c("Green", "Red", "Yellow"), selected= "Green")

    )),

    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("myhist")
    )
  ))
)

server.R

`library(ggplot2)
library(shiny)
options(shiny.error=browser)

load("/******/top_docs.RData", envir=.GlobalEnv)
shinyServer(function(input, output) {

  output$myhist <- renderPlot({

    # generate var based on input$var from ui.R
    col <- as.numeric(input$var)
    hist(top_docs[,col], breaks = seq(0, max(top_docs[,col], l = input$bins+1), col=input$color, main="Histogram of Top docs", xlab=names(top_docs[col])))

  })

})
`

Solution

  • Found it... All the sidebarPanel content was inside a sliderInput function that gives error

    top_docs = data.frame( service_total = sample(1:100000, 40, replace=T),
                           ben_total = sample(1:100000, 40, replace=T)
                           , payment = sample(1:100000, 40, replace=T), charged = sample(1:100000, 40, replace=T)
                           , allowed = sample(1:100000, 40, replace=T), unique_services_per_patient = runif(40, 1, 5.2)
                           , duplicates_per_service = runif(40, 1.1, 16.2), services_per_patient = runif(40, 1.3, 70) )
    
    # shiny plots on top_docs data
    library(shiny)
    ui <- fluidPage(
      # Header title
      titlePanel(title = h4("Top doctors plots - a histograms", align = "center")),
    
      # Sidebar with a slider input for number of bins
      sidebarLayout(
        sidebarPanel(
          # sliderInput(            < -------------  HERE
            selectInput("var", "1, Select the variables from top doc summary file", 
                        choices =c( "service_total" = 1, 
                                    "ben_total" = 2,
                                    "payment" = 3, 
                                    "charged" = 4, 
                                    "allowed" = 5, 
                                    "unique_services_per_patient" = 6, 
                                    "duplicates_per_service" = 7, 
                                    "services_per_patient" = 8), selected= 1 ),
            br(),
            sliderInput("bins", "2, Select the number of BINs for histogram", min = 5, max = 40, value=20),
            br(),
            radioButtons("color", "3, Select the color of histogram", choices =c("Green", "Red", "Yellow"), selected= "Green")
    
          # )            < -------------  HERE
        ),
    
        # Show a plot of the generated distribution
        mainPanel(
          plotOutput("myhist")
        )
      ))
    
    server <- shinyServer(function(input, output) {
    
      output$myhist <- renderPlot({
    
        # generate var based on input$var from ui.R
        col <- as.numeric(input$var)
        hist(top_docs[,col], breaks = seq(0, max(top_docs[,col]), l = input$bins+1)
                                          , col=input$color, main="Histogram of Top docs", xlab=names(top_docs[col]))
    
      })
    
    })
    
    shinyApp(ui, server)