| 
									
										
										
										
											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-05-26 12:42:19 +02:00
										 |  |  |   method( | 
					
						
							|  |  |  |     id = "proximity", | 
					
						
							|  |  |  |     name = "Proximity", | 
					
						
							|  |  |  |     description = "Proximity to telomeres", | 
					
						
							|  |  |  |     function(preset, progress) { | 
					
						
							|  |  |  |       species_ids <- preset$species_ids | 
					
						
							|  |  |  |       gene_ids <- preset$gene_ids | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-26 12:42:19 +02:00
										 |  |  |       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 | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-26 12:42:19 +02:00
										 |  |  |         # Compute the score as described above. | 
					
						
							|  |  |  |         data <- data[, | 
					
						
							|  |  |  |           .(combined_distance = as.double(summarize(distance))), | 
					
						
							|  |  |  |           by = "gene" | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2022-02-24 17:44:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-26 12:42:19 +02:00
										 |  |  |         # Normalize scores. | 
					
						
							|  |  |  |         data[, score := 1 - combined_distance / max(combined_distance)] | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-26 12:42:19 +02:00
										 |  |  |         progress(1.0) | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-26 12:42:19 +02:00
										 |  |  |         result( | 
					
						
							|  |  |  |           method = "proximity", | 
					
						
							|  |  |  |           scores = data[, .(gene, score)], | 
					
						
							|  |  |  |           details = list(data = data) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   ) | 
					
						
							| 
									
										
										
										
											2022-02-24 17:39:44 +01:00
										 |  |  | } |