# Goal 1 - shortest piece of shiny code to do each of the following, don't move to next step until previous step is done and # okayed by Jeff. Include comments for what is happening, and with links to where you got information. # - (a) Select a csv file (get that working first) # - (b) read.csv, and display summary and head of the file (get that working) # - (c) boxplot # - (d) UI to select which columns we want - we need to talk about that after (a)-(c) are done # Also - hackerrank problems, store your solutions in your permanent CS account #method of uploading files, summarizing, and boxplotting #https://www.youtube.com/watch?v=HPZSunrSo5M&t=59s #Youtube tutorial videos R Shiny App Tutorial # 15 (a) by Abhinav Agrawal #Also, https://shiny.rstudio.com/tutorial/#written-tutorials # make it so can upload larger files, size is in bytes options(shiny.maxRequestSize=30*1024**2) library(shiny) library(ggplot2) ui <- fluidPage( shinyUI(fluidPage( titlePanel("Select Data File"), sidebarLayout( sidebarPanel( fileInput("file","Select csv file", multiple = FALSE), helpText("Note - max file size is 30MB"), checkboxInput(inputId = 'header', label = 'Header', value = TRUE), radioButtons(inputId = 'sep', label = 'Separator', choices = c(Comma=',', Tab='\t'), selected = ','), textInput(inputId="skipLines", "Lines to skip", value="0"), checkboxInput(inputId = 'log2', label = 'Apply log2', value = FALSE), selectInput(inputId = "columns_to_boxplot", label="Columns to boxplot", multiple=TRUE, choices="", size=5, selectize=FALSE), submitButton(text = "Apply Changes") ), mainPanel( tabsetPanel( tabPanel("Dataset (head)", tableOutput("table")), tabPanel("Summary", verbatimTextOutput("summary")), tabPanel("Boxplot", plotOutput("boxplot")) ) ) ) )) ) server <- function(input, output, session) { data <- reactive({ if(is.null(input$file)){ NULL } else { t <- read.table(file=input$file$datapath, sep=input$sep, header = input$header, skip=input$skipLines) if (input$log2) { num_cols <- unlist(lapply(t, is.numeric)) t[,num_cols] <- log2(t[,num_cols]+1) } updateSelectInput(session, inputId = "columns_to_boxplot", label="Columns to boxplot", choices=colnames(t), selected=colnames(t)) t } }) # columns_to_boxplot <- reactive({ # input$columns # }) # creates input$file as a data frame that stores the contents of the file I.E. name and temporary location output$file <- renderTable({ if(! is.null(input$file)){ input$file } }) #Creates the dataset from read.table #read.table reads in a file in a table format and creates the dataframe output$table <- renderTable({ if(! is.null(data())){ head(data()) } }) #Summary function, applies summary to read.table. output$summary <- renderPrint({ if(! is.null(data())){ summary(data()) } }) #Boxplot function output$boxplot <- renderPlot({ if(! is.null(data())){ d <- data()[,input$columns_to_boxplot] print(input$columns_to_boxplot) boxplot(d) } }) } # Create Shiny app ---- shinyApp(ui, server)