| 
									
										
										
										
											2022-02-24 17:44:04 +01:00
										 |  |  | #' Score the distance of genes to the telomeres across species. | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  | #' | 
					
						
							|  |  |  | #' A score will be given to each gene such that 0.0 corresponds to the maximal | 
					
						
							| 
									
										
										
										
											2022-02-24 17:44:04 +01:00
										 |  |  | #' distance across all genes and 1.0 corresponds to a distance of 0. | 
					
						
							|  |  |  | #' | 
					
						
							|  |  |  | #' @param summarize A function for combining the different proximities into one | 
					
						
							|  |  |  | #'   metric. By default, [stats::median()] is used. Other suggested options | 
					
						
							|  |  |  | #'   include [min()] and [mean()]. | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  | #' | 
					
						
							|  |  |  | #' @return An object of class `geposan_method`. | 
					
						
							|  |  |  | #' | 
					
						
							|  |  |  | #' @export | 
					
						
							| 
									
										
										
										
											2022-02-24 17:44:04 +01:00
										 |  |  | proximity <- function(summarize = stats::median) { | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  |     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 | 
					
						
							|  |  |  |                 ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 # Compute the score as described above. | 
					
						
							| 
									
										
										
										
											2022-02-24 17:44:04 +01:00
										 |  |  |                 data <- data[, | 
					
						
							|  |  |  |                     .(combined_distance = as.double(summarize(distance))), | 
					
						
							|  |  |  |                     by = "gene" | 
					
						
							|  |  |  |                 ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 # Normalize scores. | 
					
						
							|  |  |  |                 data[, score := 1 - combined_distance / max(combined_distance)] | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 progress(1.0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 result( | 
					
						
							|  |  |  |                     method = "proximity", | 
					
						
							| 
									
										
										
										
											2022-02-24 17:44:04 +01:00
										 |  |  |                     scores = data[, .(gene, score)], | 
					
						
							|  |  |  |                     details = list(data = data) | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  |                 ) | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | } |