简体   繁体   中英

Error in : Column indexes must be at most 6 if positive - Shiny App Error in R

I am trying to build shiny app using shiny library and gapminder as my dataset. I am building small app, where user can select specific continent from side panel and the histogram on population vs year of the selected continent gets displayed on the mainpanel of shiny App.

I am using below code to generate the histogram. However, when I run the below code I am getting an error in R that say's

Column indexes must be 6 if positive...

I am not sure what it means.Also, I have attached my expected output.

My Rcode:

library(shiny)
library(gapminder)

ui<-fluidPage(
  titlePanel("Population Analysis"),
  sidebarLayout(sidebarPanel(
    selectInput(inputId = 'cont',
                label = "Select Continent:",
                choices = gapminder$continent),
    selectInput(inputId = 'year',
                label = "Select Year:",
                choices = gapminder$year)
  ),

  mainPanel(
    paste('Aggregate population by year'),
   textOutput("txtoutput"),
   plotOutput("continentplot")
  )
)
)

server<-function(input,output){
  output$txtoutput<-renderText({
    paste(input$cont)
  })
  output$continentplot<-renderPlot({
    req(gapminder$year)
  hist(gapminder[gapminder$pop])
  })
}
shinyApp(ui=ui, server=server)

Error:

warning: Error in : Column indexes must be at most 6 if positive, not 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12881816, 13867957, 16317921, 22227415, 25268405, 31889923, 1282697, 1476505, 1728137, 1984060, 2263554, 2509048, 2780097, 3075321, 3326498, 3428038, 3508512, 3600523, 9279525, 10270856, 11000948, 12760499, 14760787, 17152804, 20033753, 23254956, 26298373, 29072015, 31287142, 33333216, 4232095, 4561361, 4826015, 5247469, 5894858, 6162675, 7016384, 7874230, 8735988, 9875024, 10866106, 12420476, 17876956, 19610538, 21283783, 22934225, 24779799, 26983828, 29341374, 31620918, 33958947, 36203463, 38331121, 40301927, 8691212, 9712569, 10794968, 11872264, 13177000, 14074100, 15184200, 16257249, 17481977, 18565243, 19546792, 20434176, 6927772, 6965860, 7129864, 7376998, 7544201, 7568430, 7574613, 7578903, 7914969, 8069876, 8148312, 8199783, 120447, 138655, 171863, 202182, 230800, 297410, 377967, 454612, 529491, 598561, 656397, 708573, 46886859, 51365468, 56839289, 62821884, 70 [... truncated]
  179: <Anonymous>
Warning: Error in : Column indexes must be at most 6 if positive, not 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12881816, 13867957, 16317921, 22227415, 25268405, 31889923, 1282697, 1476505, 1728137, 1984060, 2263554, 2509048, 2780097, 3075321, 3326498, 3428038, 3508512, 3600523, 9279525, 10270856, 11000948, 12760499, 14760787, 17152804, 20033753, 23254956, 26298373, 29072015, 31287142, 33333216, 4232095, 4561361, 4826015, 5247469, 5894858, 6162675, 7016384, 7874230, 8735988, 9875024, 10866106, 12420476, 17876956, 19610538, 21283783, 22934225, 24779799, 26983828, 29341374, 31620918, 33958947, 36203463, 38331121, 40301927, 8691212, 9712569, 10794968, 11872264, 13177000, 14074100, 15184200, 16257249, 17481977, 18565243, 19546792, 20434176, 6927772, 6965860, 7129864, 7376998, 7544201, 7568430, 7574613, 7578903, 7914969, 8069876, 8148312, 8199783, 120447, 138655, 171863, 202182, 230800, 297410, 377967, 454612, 529491, 598561, 656397, 708573, 46886859, 51365468, 56839289, 62821884, 70 [... truncated]
  179: <Anonymous>

Expected output:

在此处输入图片说明

I am new to R and Shiny

  1. req(gapminder$year) makes continue the code because gapminder$year is not NULL . You need to use input$year . Also, you need to require that a continent is specified: req(gapminder$continent)
  2. You need another req before pasting textOuput because input$cont is empty at the beginning
  3. To plot a basic histogram you only can pass the vector of data to plot ( pop ) First, for sure, you need to filter for your year and continent selected

library(shiny)

library(gapminder)

library(dplyr)

ui<-fluidPage(
  titlePanel("Population Analysis"),
  sidebarLayout(sidebarPanel(
    selectInput(inputId = 'cont',
                label = "Select Continent:",
                choices = gapminder$continent),
    selectInput(inputId = 'year',
                label = "Select Year:",
                choices = gapminder$year)
  ),

  mainPanel(
    paste('Aggregate population by year'),
    textOutput("txtoutput"),
    plotOutput("continentplot")
  )
  )
)

server<-function(input,output){
  output$txtoutput<-renderText({
    req(input$cont)
    paste(input$cont)
  })
  output$continentplot<-renderPlot({
    req(input$year)
    req(input$cont)
    dataHist <- gapminder %>% 
      filter(continent==input$cont) %>% 
      filter(year==as.integer(input$year)) %>%
      select(pop)
    hist(dataHist$pop)
  })
}
shinyApp(ui=ui, server=server)

For your second question, you can use this code:

library(shiny)
library(ggplot2)
library(gapminder)
library(dplyr)
ui<-fluidPage(
  titlePanel("Population Analysis"),
  sidebarLayout(sidebarPanel(
    selectInput(inputId = 'cont',
                label = "Select Continent:",
                choices = gapminder$continent)
  ),

  mainPanel(
    paste('Aggregate population by year'),
    textOutput("txtoutput"),
    plotOutput("continentplot")
  )
  )
)

server<-function(input,output){
  output$txtoutput<-renderText({
    req(input$cont)
    paste(input$cont)
  })
  output$continentplot<-renderPlot({
    req(input$cont)
    dataHist <- gapminder %>% 
      filter(continent==input$cont)  %>%
      group_by(year)%>%
      select(pop,year)

    ggplot(data=dataHist, aes(x=year, y=pop)) + 
      labs(y="Population") +
      geom_bar(stat="identity", fill="purple") + 
      scale_x_continuous(name ="Year",breaks = seq(1952,2007,5))+
      theme(
        panel.background = element_rect(fill = "plum1",
                                        colour = "plum1",
                                        size = 0.5, linetype = "solid"),
        panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                        colour = "white"), 
        panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                        colour = "white")
      )

  })
}
shinyApp(ui=ui, server=server)

Yo can play with the colour and fill parameters ( http://sape.inf.usi.ch/quick-reference/ggplot2/colour ) to customize your plot! Best!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM