diff --git a/R/filters.R b/R/filters.R index 0b7d3da..f3d2cf7 100644 --- a/R/filters.R +++ b/R/filters.R @@ -53,6 +53,14 @@ filters_ui <- function(id) { tabPanelBody( value = "none" ) + ), + sliderInput( + NS(id, "distance"), + label = "Distance to telomeres", + post = " Mbp", + min = 0, + max = 150, + value = c(0, 150) ) ) } @@ -71,7 +79,7 @@ filters_server <- function(id, results) { reactive({ results <- results() - if (input$method == "percentile") { + results_prefiltered <- if (input$method == "percentile") { n_ranks <- nrow(results) results[rank <= (1 - (input$percentile / 100)) * n_ranks] } else if (input$method == "score") { @@ -81,6 +89,11 @@ filters_server <- function(id, results) { } else { results } + + results_prefiltered[ + distance >= 1000000 * input$distance[1] & + distance <= 1000000 * input$distance[2] + ] }) }) } diff --git a/R/results.R b/R/results.R index dbb9b8a..4225c2e 100644 --- a/R/results.R +++ b/R/results.R @@ -56,6 +56,7 @@ results_server <- function(id, filtered_results) { "gene", "name", "chromosome", + "distance", method_ids, "score", "percentile" @@ -66,13 +67,22 @@ results_server <- function(id, filtered_results) { "Gene", "", "Chromosome", + "Distance", method_names, "Score", "Percentile" ) output_data <- reactive({ - filtered_results()[, ..columns] + filtered_results()[, ..columns][, + distance := paste0( + format( + round(distance / 1000000, digits = 2), + nsmall = 2, + ), + " Mbp" + ) + ] }) output$download <- downloadHandler( diff --git a/R/server.R b/R/server.R index 83459f7..41da59a 100644 --- a/R/server.R +++ b/R/server.R @@ -45,11 +45,18 @@ server <- function(options) { # Rank the results. ranking <- methods_server("methods", analysis, comparison_gene_ids) + genes_with_distances <- merge( + geposan::genes, + geposan::distances[species == "hsapiens"], + by.x = "id", + by.y = "gene" + ) + # Add gene information to the results. results <- reactive({ merge( ranking(), - geposan::genes, + genes_with_distances, by.x = "gene", by.y = "id", sort = FALSE