diff --git a/app.R b/app.R new file mode 100644 index 0000000000000000000000000000000000000000..bec7dcb7c61711adedcb96f357d32f34c30c5ca7 --- /dev/null +++ b/app.R @@ -0,0 +1,121 @@ +library(shiny) +library(ggplot2) +library(dplyr) +library(magrittr) +library(ggrepel) + +# this is a global part, ran probably only once. +enrichment <- readRDS("data/enrichment.rds") +intensity <- readRDS("data/intensity.rds") +# UI +ui <- fluidPage( + title = "Yeast NMD data", + sidebarLayout( + sidebarPanel( + selectInput("cole_x", "x column ENRICHMENT", + names(enrichment)[c(-1, -2)], multiple=FALSE, selectize=TRUE), + selectInput("cole_y", "y column ENRICHMENT", + names(enrichment)[c(-1, -2)], multiple=FALSE, selectize=TRUE), + textOutput("info_text"), + plotOutput("plot_e", brush = brushOpts(id = "plot_e_brush")), + sliderInput("lab_threshold", label="Labeling threshold value", + value=4, min=0, max=10, step = 0.5), + downloadButton("save_plot", label="Download plot"), + textOutput("control_text"), + plotOutput("plot_i"), + width=4), + mainPanel( + tabsetPanel( + tabPanel("Data table", + textOutput("info_scrolltable"), + DT::dataTableOutput("mytable1"), width=8), + tabPanel("Documentation", + includeHTML("Documentation.html")) + ) + ) + ) +) + +# SERVER +server <- function(input, output) { + #Reactive that returns the whole dataset if there is no brush + selectedDataE <- reactive({ + datae <- brushedPoints(enrichment, + input$plot_e_brush) + if (nrow(datae) == 0) + datae <- enrichment + datae + }) + + labelThreshold <- reactive({ + labthreshold <- input$lab_threshold + labthreshold + }) + + output$mytable1 <- DT::renderDataTable({ + DT::datatable(selectedDataE(), + filter='top', + extensions = 'Buttons', + options = list(lengthMenu = c(25, 100, 1000), + pageLength=25, + dom='Bfrtip', + buttons=c('copy', 'colvis'), + scrollX=TRUE), + colnames = gsub(names(enrichment), pattern="([_\\.])", replacement = " ")) + }) + + plotXY = function() + { + thr <- labelThreshold() + overN <- which((enrichment[, input$cole_x] > thr) | (enrichment[, input$cole_y] > thr)) + ggplot(data = enrichment, aes_string(x=input$cole_x, y=input$cole_y))+ + geom_point()+ + geom_text_repel(data=enrichment[overN, ], aes(label=Gene))+ + ggtitle("Enrichment (fold, log2 axes)") + } + + plotXY_intensity = function() + { + thr <- labelThreshold() + overN <- which((enrichment[, input$cole_x] > thr) | (enrichment[, input$cole_y] > thr)) + ggplot(data = intensity, aes_string(x=input$cole_x, y=input$cole_y))+ + geom_point()+ + geom_text_repel(data=intensity[overN, ], aes(label=Gene))+ + ggtitle("LTOP2 values (log2 axes)") + } + + saveplotFilename <- reactive({ + fname <- paste("plot", input$cole_x, '_', input$cole_y, '.pdf', sep='') + fname + }) + + output$plot_e <- renderPlot({ + plotXY() + }) + + output$plot_i <- renderPlot({ + plotXY_intensity() + }) + + output$info_text <- renderText({ + "(i) Click-drag selects region of the plot." + }) + + output$info_scrolltable <- renderText({ + "(i) Scroll right to see more columns --->" + }) + + output$control_text <- renderText({ + saveplotFilename() + }) + + output$save_plot <- downloadHandler( + filename = function(){saveplotFilename()}, + content = function(file) { + ggsave(file, plot = plotXY(), device = "pdf") + } + ) + +} + +shinyApp(ui, server)