honnielemons
honnielemons

Reputation: 57

Referencing a selected input into a dataset?

I am currently having issues with my R.Shiny app which I have designed. The UI has a drop down menu which selects a variable "returnvar", one of the columns in my dataframe source_file. However, upon running the code below I receive an error message stating:

Warning: Unknown or uninitialised column: 'returnvar'.

Warning: Error in : geom_line requires the following missing aesthetics: y

Does anyone know how I can reference an input into my source file? (Something to fix the error from the line source_file_filtered$returnvar) Would greatly appreciate all the help I can get for this, thanks!

App.R

# Defining UI
ui <- fluidPage(theme = shinytheme("darkly"),
    navbarPage(
      "App", #Title of app
      tabPanel("Weekly Cumulative Returns",
               sidebarPanel(
                 tags$h3("Input:"),
                 dateRangeInput("daterange", "Date range",
                                start = "2016-01-01",
                                end = "2021-04-02",
                                min = "2016-01-01",
                                max = "2021-04-02",
                                format = "yyyy/mm/dd",
                                separator = "to"),
                 selectInput("returnvar", "Index",
                             choices= names(source_file[2:(length(source_file)-1)])),
                 ), #sidebarpanel
               
               mainPanel(
                 # Output: Correlation Plot ----
                 plotOutput(outputId = "plot2"),
               ), #mainPanel
               
      ) #tabpanel
     ) #navbarPage
    ) #fluidPage
  
# Defining Server  
server <- function(input, output) {
     #plot for Weekly Cumulative Returns tab            
     output$plot2 <- renderPlot({
      returncolumn(returnvar = input$returnvar,
                   daterange = input$daterange)
      
     })
    }
  
# Create Shiny Object
  shinyApp(ui = ui, server = server)

Global.R

#choose source file to work with
file_name = file.choose()
source_file = read_csv(file_name)
source_file$Date = as.Date(source_file$Date)

#defining returncolumn as a function to return of selected variable over the selected date range in shiny
returncolumn = function(returnvar, daterange)
{
  source_file_filtered <- source_file %>% 
    filter(Date >= daterange[1] & Date <= daterange[2])
  g = ggplot(data = source_file_filtered, mapping = aes(x=Date, y=source_file_filtered$returnvar)) + geom_line(color="blue")
    
  print(g)  
}

Upvotes: 1

Views: 56

Answers (1)

TimTeaFan
TimTeaFan

Reputation: 18581

Without the data its hard to test, but changing source_file_filtered$returnvar to source_file_filtered[[returnvar]] should make it work.

returncolumn = function(returnvar, daterange)
{
  source_file_filtered <- source_file %>% 
    filter(Date >= daterange[1] & Date <= daterange[2])

  g = ggplot(data = source_file_filtered,
             mapping = aes(x = Date,
                           y = source_file_filtered[[returnvar]])) + 
      geom_line(color="blue")
    
  print(g)  
}

Upvotes: 1

Related Questions