0
votes

I am using the following two Input functions code in shiny:

selectInput("categoryVisu", label="SELECT CATEGORY", choices = list("Full" = "full", "Fact" = "fact", "Fact Positive" = "factpos", selected = "full", multiple = TRUE)

and

selectInput("investerVisu", label="SELECT INVESTOR", choices = list("Informed" = "inf", "Noise" = "noise"), selected = "inf", multiple = TRUE)

My task is now, if the user select for example "Full" and "Informed" than my code should take the column "InformedFull" from my dataset to print the code. How can I handle this? My DataSet looks like this:

Dataset

I already did the ggplot code, that looks like this:

ggplot(data = OLS.Data, aes(x=OLS.Data$Date, y=...))+geom_line()

So where I placed the ... their should be based on the booth selection of my selectInput, be the correct column of my dataset.

My UI Boxes looking like this:

  tabItem(tabName = "visu",
          fluidRow(
            box(
              title = "Controls-1", 
              status = "primary", 
              solidHeader = TRUE,
              width = 3,
              selectInput("categoryVisu", label="SELECT CATEGORY", choices = list("Full" = "Full", "Fact" = "Fact", "Fact Positive" = "Fact.Pos", "Fact Negative" = "Fact.Neg", "Emotions" = "Emotions", "Emotions Fact" = "EmotionsFact"), selected = "Full", multiple = TRUE)
            ),

            box(
              title = "Controls-2", 
              status = "primary", 
              solidHeader = TRUE,
              width = 3,
              selectInput("investerVisu", label="SELECT INVESTOR", choices = list("Informed" = "Informed", "Noise" = "Noise"), selected = "Informed", multiple = TRUE)
            ),

And my server file:

server <- function(input, output) {

  observeEvent(input$categoryVisu,{

    partA<-input$catagoryVisu
    partA<-as.character(partA)    

  })

  observeEvent(input$investerVisu,{

    partB<-input$investerVisu
    partB<-as.character(partB)

  })

  partC<-paste(partB,partA)

  DataFus<-OLS.Data$partC

  output$myPlot <- renderPlot({
    ggplot(data = OLS.Data, aes(x=OLS.Data$Date, y=OLS.Data$NYSE))+geom_line()+geom_line(data = OLS.Data,aes(x=OLS.Data$Date, y=DataFus),color="red")+geom_line(alpha = input$alphaVisu)
  })

}
2

2 Answers

1
votes

Solution found:

server <- function(input, output) {

  partA = NULL
  partB = NULL

  makeReactiveBinding("partA")
  makeReactiveBinding("partB")

  observeEvent(input$categoryVisu, { 
    partA<<-input$categoryVisu
    partA<<-as.character(partA)
  })

  observeEvent(input$investorVisu, { 
    partB<<-input$investorVisu
    partB<<-as.character(partB)
  })

  observe({
    PartC<-as.character(paste(partB,partA,sep=""))
    print(PartC)
      output$myPlot <- renderPlot({
        ggplot(data = OLS.Data, aes(x=OLS.Data$Date, y=OLS.Data$NYSE))+geom_line()+geom_line(data = OLS.Data,aes(x=OLS.Data$Date, y=OLS.Data[PartC]),color="red")+geom_line(alpha = input$alphaVisu)
      })
  })
0
votes

Pull the inputs to the two, and then paste them together. Once you have that use that to pull the data from your data frame. Input the data as a variable into the plot function.

# If you have a button simply observeEvent(input$button, { and put this all 
# under that environment.

partA<-reactive({input$categoryVisu

})

partB<-reactive({input$investerVisu

})


#paste together to get full column name

PartC<-reactive(paste(partA(),partB(),sep=""))

# Pull column from data frame OR put it directly into ggplot argument
Data<-OLS.Data[PartC]

output$myplot<-renderPlot({

#use column as Y-Axis series
ggplot(data = OLS.Data, aes(x=OLS.Data$Date, y=OLS.Data[PartC]))+geom_line()

})

Note that you have assigned "inf" as the value for someone selecting "Informed" therefore it will not match your data frame column headers. The easy way to fix this is to set the values of the choices to the names that will be used in the column headers, e.g "Informed"="Informed"

If we use a button

>ui
#Add button to ui.R
actionButton("go","Reload")

>server
observeEvent(input$go, {

#Grab input to categoryVisu
partA<-input$categoryVisu
partA<-as.character(partA)

#Grab input to investerVisu
partB<-input$investerVisu
partB<-as.character(partB)

#paste together to get full column name
PartC<-paste(partA,partB,sep="")

# Pull column from data frame OR put it directly into ggplot argument
Data<-OLS.Data[PartC]

output$myplot<-renderPlot({

#use column as Y-Axis series
ggplot(data = OLS.Data, aes(x=OLS.Data$Date, y=OLS.Data[PartC]))+geom_line()

}) #Closes plot

}) #Closes observing of action button