geposan/R/proximity.R

31 lines
1.1 KiB
R
Raw Normal View History

2021-10-19 13:39:55 +02:00
# 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.
2021-10-21 14:26:03 +02:00
proximity <- function(preset, progress = NULL) {
2021-10-21 17:25:44 +02:00
species_ids <- preset$species_ids
gene_ids <- preset$gene_ids
2021-10-19 13:39:55 +02:00
2021-10-21 17:25:44 +02:00
cached("proximity", c(species_ids, gene_ids), {
# Prefilter distances by species and gene.
distances <- geposan::distances[
species %chin% preset$species_ids & gene %chin% preset$gene_ids
]
2021-10-19 13:39:55 +02:00
2021-10-21 17:25:44 +02:00
# Compute the score as described above.
2021-10-19 13:39:55 +02:00
2021-10-21 17:25:44 +02:00
distances <- distances[, .(mean_distance = mean(distance)), by = "gene"]
max_distance <- distances[, max(mean_distance)]
distances[, score := 1 - mean_distance / max_distance]
2021-10-19 15:03:10 +02:00
2021-10-21 17:25:44 +02:00
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)
}
distances[, .(gene, score)]
})
2021-10-19 13:39:55 +02:00
}