简体   繁体   中英

Load files only once in R shiny server end

If the data file does not change but the model parameter changes, is there any way to only load the data file (uploaded by user) once in shiny server end? This is to say, when the file is uploaded and read by the R code, every time the user change the model parameter through web UI, the code does not reload the data file. I am very new to R shiny. I could not find any example. Thanks!

Shiny is pretty smart.

It knows when it needs to do something again and when it doesn't. This is a case when Shiny knows it doesn't need to reload the file, changing the parameter does not prompt a reload.

library(shiny)

options(shiny.maxRequestSize = 9*1024^2)

server <- shinyServer(function(input, output) {


  data <- eventReactive(input$go, {
    validate(
      need(input$file1, "Choose a file!")
    )

    inFile <- input$file1

    read.csv(inFile$datapath, header = input$header,
             sep = input$sep, quote = input$quote)
  })

  output$plot <- renderPlot({
    set <- data()
    plot(set[, 1], set[, 2] * input$param)
  })
})


ui <- shinyUI(fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose file to upload',
                accept = c(
                  'text/csv',
                  'text/comma-separated-values',
                  'text/tab-separated-values',
                  'text/plain',
                  '.csv',
                  '.tsv'
                )
      ),
      tags$hr(),
      checkboxInput('header', 'Header', TRUE),
      radioButtons('sep', 'Separator',
                   c(Comma=',',
                     Semicolon=';',
                     Tab='\t'),
                   ','),
      radioButtons('quote', 'Quote',
                   c(None='',
                     'Double Quote'='"',
                     'Single Quote'="'"),
                   '"'),
      tags$hr(),
      p('If you want a sample .csv or .tsv file to upload,',
        'you can first download the sample',
        a(href = 'mtcars.csv', 'mtcars.csv'), 'or',
        a(href = 'pressure.tsv', 'pressure.tsv'),
        'files, and then try uploading them.'
      ),
      actionButton("go", "Load File and plot"),
      sliderInput("param", "Parameter", 0, 1, value = 0.1, step = 0.1, animate = TRUE)

    ),
    mainPanel(
      tableOutput('contents'),
      plotOutput("plot")
    )


  )
))

shinyApp(ui = ui, server = server)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM