mirror of
https://github.com/johrpan/geposanui.git
synced 2025-10-26 03:07:24 +01:00
gsea: Move to separate module
This commit is contained in:
parent
045d4dd6ad
commit
9fb6ca428e
2 changed files with 88 additions and 66 deletions
86
R/gsea.R
Normal file
86
R/gsea.R
Normal 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
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
68
R/results.R
68
R/results.R
|
|
@ -152,11 +152,7 @@ results_ui <- function(id, options) {
|
||||||
title = "g:Profiler",
|
title = "g:Profiler",
|
||||||
div(
|
div(
|
||||||
style = "margin-top: 16px",
|
style = "margin-top: 16px",
|
||||||
plotly::plotlyOutput("gost_plot"),
|
gsea_ui(NS(id, "gsea"))
|
||||||
),
|
|
||||||
div(
|
|
||||||
style = "margin-top: 16px",
|
|
||||||
DT::DTOutput(NS(id, "gost_details"))
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -407,67 +403,7 @@ results_server <- function(id, options, analysis) {
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
gost <- reactive({
|
gsea_server("gsea", results_filtered)
|
||||||
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
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue