Download!

Ottavia M. Epifania

Download the summary

appExamples/download.R


Code

ui = fluidPage(
  useShinyjs(),  
  sidebarLayout(
    sidebarPanel(
                 a(id = "imp_det", 
                   h3("Choose a dataset", style = "font-style: normal; font-size: 14pt;"), 
                   href = "#"),
                 selectInput(inputId = "dataset",
                             label = "",
                             choices = list("rock" = 1,
                                            "pressure" = 2,
                                            "cars" = 3,
                                            "I want to use my data!!" =4)),
                 conditionalPanel(
                   condition = "input.dataset == '4'",
                   fileInput("example", "", accept = c("csv"))
                 ),
                 actionButton("load", "Upload data"), 
                 conditionalPanel(                    
                   condition = "input.load >= '1'",  
                   uiOutput("var1"),                
                   uiOutput("var2"),                 
                   actionButton("select", "Select & Display") 
                 ),     
                 downloadButton("downloadSummary", "Download")
    ),
    mainPanel(
      plotOutput(
        "graph"
      ),    
      verbatimTextOutput(
                 "summary"
               ))
    )
  )
server = function(input, output){
  values <- reactiveValues()
  dataInput <- reactive({
    if(input$dataset == 1){
      data <- rock
    } else if (input$dataset == 2 ){
      data <- pressure
    } else if (input$dataset == 3) {
      data <- cars
    } else if (input$dataset == 4) {
      data <- read.csv(input$example$datapath)
    }
  })
observeEvent(input$load, {
    values$data <- data.frame(dataInput())
    # check the characters
    if (any(sapply(values$data, is.character)) == TRUE) {
      values$data[, sapply(values$data, is.character) == T] = lapply(values$data[, sapply(values$data, is.character) == T], as.factor)
    } else {
      values$data = values$data
    }
  })
shinyjs::onclick("imp_det",  # here the nice visual effect
                   shinyjs::toggle(id = "details_import", anim = TRUE))
output$var1 <- renderUI({    
    nam <- colnames(values$data) 
    selectInput("var1", label = "Select x:", 
                choices = c(nam), multiple = F,
                selected = nam[1])
  })
output$var2 <- renderUI({
    nam2 <- colnames(values$data) 
    selectInput("var2", label = "Select y:",
                choices = c(nam2), multiple = F,
                selected = nam2[1])
  })
newdata <- observeEvent(input$select, 
                          {values$df <- values$data[c(input$var1, input$var2)]
                          })
output$graph <- renderPlot({
    validate(
      need(input$select > 0, "Waiting for data") 
    )                                        # load to select
    df = values$df
    plot(df[, c(1:2)]) # use it normally
})
output$summary <- renderPrint({
    validate(
      need(input$select > 0, "Waiting for data")
    )
    df <- values$df # same
    descript_data = df %>%
      summarise(m_1 = mean(df[,1]), sd_1 = sd(df[,1]),
                m_2 = mean(df[,2]), sd_2 = sd(df[,2]))
    colnames(descript_data) = gsub("1", colnames(df)[1], colnames(descript_data))
    colnames(descript_data) = gsub("2", colnames(df)[2], colnames(descript_data))
    descript_data = data.frame(descript_data)
    values$descript_data = descript_data
    descript_data
  })
output$downloadSummary <- downloadHandler(
    filename = function() {
      paste("descriptive-",input$dataset, ".csv", sep = "")
    },
    content = function(file) {
      write.table(values$descript_data, file, sep = ",",
                  row.names = FALSE)
    }
  )
}
shinyApp(ui, server)