mirror of
https://github.com/johrpan/geposan.git
synced 2025-10-26 18:57:25 +01:00
Restructure classes and their responsibilities
This commit is contained in:
parent
01ec301d6d
commit
e2b93babe5
27 changed files with 974 additions and 634 deletions
|
|
@ -1,34 +1,39 @@
|
|||
# Score the mean distance of genes to the telomeres across species.
|
||||
#
|
||||
# A score will be given to each gene such that 0.0 corresponds to the maximal
|
||||
# mean distance across all genes and 1.0 corresponds to a distance of 0.
|
||||
proximity <- function(preset, progress = NULL) {
|
||||
species_ids <- preset$species_ids
|
||||
gene_ids <- preset$gene_ids
|
||||
#' Score the mean distance of genes to the telomeres across species.
|
||||
#'
|
||||
#' A score will be given to each gene such that 0.0 corresponds to the maximal
|
||||
#' mean distance across all genes and 1.0 corresponds to a distance of 0.
|
||||
#'
|
||||
#' @return An object of class `geposan_method`.
|
||||
#'
|
||||
#' @export
|
||||
proximity <- function() {
|
||||
method(
|
||||
id = "proximity",
|
||||
name = "Proximity",
|
||||
description = "Proximity to telomeres",
|
||||
function(preset, progress) {
|
||||
species_ids <- preset$species_ids
|
||||
gene_ids <- preset$gene_ids
|
||||
|
||||
cached("proximity", c(species_ids, gene_ids), {
|
||||
# Prefilter distances by species and gene.
|
||||
data <- geposan::distances[
|
||||
species %chin% preset$species_ids & gene %chin% preset$gene_ids
|
||||
]
|
||||
cached("proximity", c(species_ids, gene_ids), {
|
||||
# Prefilter distances by species and gene.
|
||||
data <- geposan::distances[
|
||||
species %chin% preset$species_ids &
|
||||
gene %chin% preset$gene_ids
|
||||
]
|
||||
|
||||
# Compute the score as described above.
|
||||
data <- data[, .(mean_distance = mean(distance)), by = "gene"]
|
||||
max_distance <- data[, max(mean_distance)]
|
||||
data[, score := 1 - mean_distance / max_distance]
|
||||
# Compute the score as described above.
|
||||
data <- data[, .(mean_distance = mean(distance)), by = "gene"]
|
||||
max_distance <- data[, max(mean_distance)]
|
||||
data[, score := 1 - mean_distance / max_distance]
|
||||
|
||||
if (!is.null(progress)) {
|
||||
# We do everything in one go, so it's not possible to report
|
||||
# detailed progress information. As the method is relatively quick,
|
||||
# this should not be a problem.
|
||||
progress(1.0)
|
||||
progress(1.0)
|
||||
|
||||
result(
|
||||
method = "proximity",
|
||||
scores = data[, .(gene, score)]
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
structure(
|
||||
list(
|
||||
results = data[, .(gene, score)]
|
||||
),
|
||||
class = "geposan_method_results"
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue