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
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)
req
before pasting textOuput
because input$cont
is empty at the beginningpop
) First, for sure, you need to filter for your year and continent selectedlibrary(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.