If I run my code in this case, it works, known that the input is yet not passed.
the code simply makes dataframe out of a data.csv
.
this datframe has many the following columns code
, vaccinationsTotal
, peopleFirstTotal
, peopleFullTotal
, peopleBoosterTotal
and what I am trying to do is just select the column through the input$sel
library(shiny)
library(dplyr)
library(ggplot2)
library(magrittr)
library(readr)
dataf <- read_csv("data.csv")
server <- function(input, output, session) {
#Summarize Data and then Plot
data <- reactive({
req(input$sel)
df <- dataf %>% group_by(code) %>% summarise(vaccinationsTotal)
print(df)
})
#Plot
output$plot <- renderPlot({
g <- ggplot(data(), aes( y = vaccinationsTotal ,x = code) )
g + geom_bar( stat = "sum")
})
}
ui <- basicPage(
selectInput(inputId = "sel",
label = "eine möglichkeit auswählen",
list("vaccinationsTotal","peopleFirstTotal","peopleFullTotal","peopleBoosterTotal")),
plotOutput("plot")
)
shinyApp(ui = ui, server = server)
if I run my code after replacing summarise(vaccinationsTotal)
with summarise(input$sel)
it shows me the ylim
just with one value which is vaccinationsTotal
df <- dataf %>% group_by(code) %>% summarise(vaccinationsTotal)
print(df)
})
#Plot
output$plot <- renderPlot({
g <- ggplot(data(), aes( y = vaccinationsTotal ,x = code) )
g + geom_bar( stat = "sum")
How can I pass an input variable in this case ? I spent days trying things.
You have made 3 mistakes in your code.
You are passing input$sel
to summarise. What you need to pass is get(input$sel)
.
The other thing is when you summarise the data in R, it uses the column name of the data that you are summarising. So, in your case, while plotting the data, you need to pass the same column name to the y-axis
of the ggplot
.
Or you can just rename the column while summarising it. Like this:
summarise(output = get(input$sel))
summarise
function.server <- function(input, output, session) {
#Summarize Data and then Plot
data <- reactive({
req(input$sel)
df <- dataf %>%
group_by(code) %>%
summarise(output = get(input$sel))
print(df)
})
#Plot
output$plot <- renderPlot({
g <- ggplot(data(), aes(y = output, x = code) )
g + geom_bar( stat = "sum")
})
}
Please note that doing this will show output
as your y-axis
label. Although you can tweak it inside the ggplot
function.