title: Save and Load user selections based on file selection - RShiny
body: <p>I am trying to create simple app that acts as a GUI for studying different files having same variables but with different version and content. I am unable to give an app where every time the user opens the app they dont have to enter in their parameters again where they left off. I'd like them to be able to save their parameters and bring them up again when they go back to the app.</p>
  
  <p>I am giving my sample code here, however the number of inputs and plots are far more in the actual app. I want to know if there is any solution to save these dependent inputs and outputs.</p>
  
  <pre><code>library(shiny)
  library(pryr)
  
  ui = shinyUI(fluidPage(
  
    # Application title
    titlePanel("Example Title"),
  
    # Sidebar structure
    sidebarLayout(
      sidebarPanel(
        textInput("save_file", "Save to file:", value="sample.RData"),
        actionButton("save", "Save input value to file"),
        uiOutput("load"),
        uiOutput("file"),
        uiOutput("mytype"),
        uiOutput("mysubtype")
      ),
  
      # Show a plot of the generated distribution
      mainPanel(
        tabsetPanel(id="tab",
                    tabPanel(
                      "Plot",
                      plotOutput("distPlot"),
                      checkboxInput(inputId = "density",
                                    label = strong("Show Adjustment Factors"),
                                    value = FALSE),
                      conditionalPanel(condition = "input.density == true",
                                       sliderInput(inputId = "bandwidth",
                                                   label = "Width adjustment: ",
                                                   min = 0.5, max = 4, value = 1, step = 0.1),
                                       radioButtons("mycolor", "Color Adjustment: ",
                                                    choices = c(Red = "red", Black = "black", Blue = "blue"),selected = "black", inline = TRUE)
                      )),
                    tabPanel("Summary",
                             h3(textOutput("label")),
                             verbatimTextOutput("summary")
                    )
        ))
  
    )
  )
  )
  
  server = function(input, output, session) {
    # render a selectInput with all RData files in the specified folder
    output$load &lt;- renderUI({
      choices &lt;- list.files("/home/user/Documents/Shiny/", pattern="*.RData")
      selectInput("input_file", "Select input file", choices)
    })
  
    # render a selectInput with all csv files in the specified folder so that user can choose the version
    output$file &lt;- renderUI({
      choices.1 &lt;- list.files("/home/user/Documents/Shiny/", pattern="*.csv")
      selectInput("input_csv", "Select csv file", choices.1)
    })
  
    # Load a csv file and update input
    data = eventReactive(input$input_csv, {
      req(input$input_csv)
      read.csv(paste0("/home/user/Documents/Shiny/",input$input_csv),
               header = TRUE,
               sep = ",")
    })
  
    #Display Type - Types may differ based on file selection
    output$mytype &lt;- renderUI({
      selectInput("var1", "Select a type of drink: ", choices = levels(data()$Type))
    })
  
    #Display SubType - This would be dependent on Type Selection
    output$mysubtype &lt;- renderUI({
      selectInput("var2", "Select the SubType: ", choices = as.character(data()[data()$Type==input$var1,"Subtype"]))
    })
  
    # Save input when click the button
    observeEvent(input$save, {
      validate(
        need(input$save_file != "", message="Please enter a valid filename")
      )
      mycolor &lt;- input$mycolor
      mytype = input$var1
      mysubtype = input$var2
      density &lt;- input$density
      bandwidth &lt;- input$bandwidth
      save(bandwidth, density,  mycolor, mytype, mysubtype,
           file=paste0("/home/user/Documents/Shiny/", input$save_file))
      choices &lt;- list.files("/home/user/Documents/Shiny/", pattern="*.RData")
      updateSelectInput(session, "input_file", choices=choices)
  
      choices.1 &lt;- list.files("/home/user/Documents/Shiny/", pattern="*.csv")
      updateSelectInput(session, "input_csv", choices=choices.1)
    })
    # Load an RData file and update input
    # input$var1, input$var2, input$density, input$bandwidth, input$mycolor),
    observeEvent(c(input$input_file), 
                 {
      load(paste0("/home/user/Documents/Shiny/",input$input_file))
      updateSelectInput(session, "var1", choices = levels(data()$Type), selected = mytype)
      updateSelectInput(session, "var2", choices = as.character(data()[data()$Type==mytype,"Subtype"]), selected = mysubtype)
      updateCheckboxInput(session, "density", value = density)
      updateSliderInput(session, inputId = "bandwidth", value=bandwidth)
      updateRadioButtons(session, "mycolor", choices = c(Red = "red", Black = "black", Blue = "blue"), selected = mycolor, inline = TRUE)
    })
  
    output$distPlot &lt;- renderPlot({
  
      # generate plot
      x = data()[data()$Type == input$var1 &amp; data()$Subtype == input$var2, c("Alcohol_Content","Price")]
      plot(x$Alcohol_Content, x$Price, type = "l", xlab = "Alcohol content", ylab = "Price",
           main = "Sample Plot",
           col="red",
           lwd=1.5)
      if (input$density)
        plot(x$Alcohol_Content, x$Price, type = "p", xlab = "Alcohol content", ylab = "Price",
             main = "Sample Plot",
             col=input$mycolor,
             lwd=input$bandwidth)
  
  
    })
  
  
    output$summary &lt;- renderText(summary(data()))
  
  }
  
  
  shinyApp(ui, server)
  </code></pre>
  
  <ol>
  <li>The Input csv files would be always stored in
  "/home/user/Documents/Shiny/"</li>
  <li>The User could just click "Save to
  file:" and it should save the user selections inside "sample.RData"
  located in same "/home/user/Documents/Shiny/". Hence I want to give a selectinput where user can choose the .RData file also.</li>
  <li>The user should also be able to save the inputs on Mainpanel which they would use to modify the chart</li>
  </ol>
  
  <p>Questions:-</p>
  
  <ol>
  <li>Most of the code works fine given above but how can I save #Display Subtype.</li>
  <li>What happens if I add one more dependent list like Type and Subtype?</li>
  <li>And also if I can get some help on whether the solution would work for multiple select inputs?.</li>
  </ol>
  
  <p>Any help on the code would be really be appreciated.</p>
  
  <p>Dummy Data:-</p>
  
  <pre><code>x = data.frame(Type=rep(c("WINE"), 9), Subtype=rep(c("TABLE WINE RED", "TABLE WINE WHITE", "MONTILLA"), each=3), Alcohol_content= c(14, 11.5, 12, 11, 13.5, 11, 12.5, 12, 11.5), Price = c(30.99, 32.99, 29.99, 33.99, 36.99, 34.99, 119, 32.99, 13.99))
  y = data.frame(Type=rep(c("REFRESHMENT"), 9), Subtype=rep(c("CIDER ALL", "SPIRIT", "BEER"), each=3), Alcohol_content= c(5, 5.2, 7, 5.3, 6.9, 5, 5, 6, 5), Price = c(9.99, 9.99, 8.99, 9.95, 3.49, 9.99, 12.99, 13.49, 21.99))
  bcl_data1 = rbind(x, y)
  write.csv(bcl_data1, "bcl_data1.csv")
  </code></pre>
  
  <p>There are many more Subtypes under each Type (Wine , Refreshment). I am somehow not able to retrieve the Subtype value through above code, However when I load Sample.RData I can see var2 = my selected value.</p>
  
  <p>I would like to know how save these values please.</p>