gsea: Move to separate module

This commit is contained in:
Elias Projahn 2022-08-18 10:00:05 +02:00
parent 045d4dd6ad
commit 9fb6ca428e
2 changed files with 88 additions and 66 deletions

86
R/gsea.R Normal file
View file

@ -0,0 +1,86 @@
#' Create a GSEA page.
#' @noRd
gsea_ui <- function(id) {
verticalLayout(
div(
style = "margin-top: 16px",
plotly::plotlyOutput(NS(id, "plot")),
),
div(
style = "margin-top: 16px",
DT::DTOutput(NS(id, "details"))
)
)
}
#' Create a server for the comparison editor.
#'
#' @param id ID for namespacing the inputs and outputs.
#' @param ranking The ranking to be analyzed.
#'
#' @noRd
gsea_server <- function(id, ranking) {
moduleServer(id, function(input, output, session) {
gsea_analysis <- reactive({
withProgress(
message = "Querying g:Profiler",
value = 0.0,
{ # nolint
setProgress(0.2)
gprofiler2::gost(
ranking()[, gene],
custom_bg = NULL, # TODO
domain_scope = "custom_annotated"
)
}
)
}) |> bindCache(ranking())
output$plot <- plotly::renderPlotly({
gprofiler2::gostplot(
gsea_analysis(),
capped = FALSE,
interactive = TRUE
)
})
output$details <- DT::renderDT({
data <- data.table(gsea_analysis()$result)
setorder(data, p_value)
data[, total_ratio := term_size / effective_domain_size]
data[, query_ratio := intersection_size / query_size]
data[, increase := (query_ratio - total_ratio) / total_ratio]
data <- data[, .(
source,
term_name,
total_ratio,
query_ratio,
increase,
p_value
)]
DT::datatable(
data,
rownames = FALSE,
colnames = c(
"Source",
"Term",
"Total ratio",
"Query ratio",
"Increase",
"p-value"
),
options = list(
pageLength = 25
)
) |>
DT::formatRound("p_value", digits = 4) |>
DT::formatPercentage(
c("total_ratio", "query_ratio", "increase"),
digits = 2
)
})
})
}

View file

@ -152,11 +152,7 @@ results_ui <- function(id, options) {
title = "g:Profiler",
div(
style = "margin-top: 16px",
plotly::plotlyOutput("gost_plot"),
),
div(
style = "margin-top: 16px",
DT::DTOutput(NS(id, "gost_details"))
gsea_ui(NS(id, "gsea"))
)
)
)
@ -407,67 +403,7 @@ results_server <- function(id, options, analysis) {
)
})
gost <- reactive({
withProgress(
message = "Querying g:Profiler",
value = 0.0,
{ # nolint
setProgress(0.2)
gprofiler2::gost(
results_filtered()[, gene],
custom_bg = preset()$gene_ids,
domain_scope = "custom_annotated"
)
}
)
}) |> bindCache(results_filtered(), preset())
output$gost_plot <- plotly::renderPlotly({
gprofiler2::gostplot(
gost(),
capped = FALSE,
interactive = TRUE
)
})
output$gost_details <- DT::renderDT({
data <- data.table(gost()$result)
setorder(data, p_value)
data[, total_ratio := term_size / effective_domain_size]
data[, query_ratio := intersection_size / query_size]
data[, increase := (query_ratio - total_ratio) / total_ratio]
data <- data[, .(
source,
term_name,
total_ratio,
query_ratio,
increase,
p_value
)]
dt <- DT::datatable(
data,
rownames = FALSE,
colnames = c(
"Source",
"Term",
"Total ratio",
"Query ratio",
"Increase",
"p-value"
),
options = list(
pageLength = 25
)
) |>
DT::formatRound("p_value", digits = 4) |>
DT::formatPercentage(
c("total_ratio", "query_ratio", "increase"),
digits = 2
)
})
gsea_server("gsea", results_filtered)
})
}