The following code is my Shiny ui:
library(shiny)
shinyUI(fluidPage(
titlePanel("All Country Spend"),
sidebarLayout(
sidebarPanel( selectInput("split",
label = "Choose Fill For the Chart",
choices = c("Action.Obligation","Action_Absolute_Value"),
selected = "Action.Obligation"
)
),
mainPanel(plotOutput("SpendChart"))
)
))
And the following is the server code:
library(shiny)
library(ggplot2)
shinyServer(function(input, output) {
spend <- read.csv("data/Ctrdata.csv")
output$SpendChart <- renderPlot({
Country <- spend$Principal.Place.of.Performance.Country.Name
ggplot(spend, aes(x = Country, y = input$split)) + geom_bar(stat = "identity")
})
})
Every time I run it I get the following error:
"Error in eval(expr, envir, enclos) : object 'input' not found"
I am trying to render a simple bar chart that will toggle between the net and absolute value of contract spending in each country, but it won't recognize my input named "split" from the selectInput
box.
Here is a sample of my data frame:
data.frame(Country = c("Turk", "Turk", "Saudi", "Saudi", "Ger", "Ger"),
Action.Obligation = c(120,-345,565,-454, 343,-565),
Action_Absolute_Value = c(120,345,565,454,343,565))
The problem is with ggplot evaluating the variable in the context of the data frame provided, spend in your case. What you want is:
ggplot(spend, aes_string(x = "Country", y = input$split))
So your working server.R code is:
library(shiny)
library(ggplot2)
shinyServer(function(input, output) {
spend <- data.frame(Country = c("Turk", "Turk", "Saudi", "Saudi", "Ger", "Ger"),
Action.Obligation = c(120,-345,565,-454, 343,-565),
Action_Absolute_Value = c(120,345,565,454,343,565))
output$SpendChart <- renderPlot({
ggplot(spend, aes_string(x = "Country", y = input$split)) +
geom_bar(stat = "identity")
})
})
Obviously, you can replace the spend df with your CSV import.
I've solved this issue with "<<-". I don't know for sure, but it is related to global environment:
output$SpendChart <- renderPlot({
choice <<- input$split
Country <- spend$Principal.Place.of.Performance.Country.Name
ggplot(spend, aes(x = Country, y = choice)) + geom_bar(stat = "identity")
})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With