From 7afff9a5512e2c1bf5988149feab6433b2991214 Mon Sep 17 00:00:00 2001 From: Chunmingl Date: Thu, 15 May 2025 16:31:11 -0400 Subject: [PATCH] update maximum snp number restriction --- R/ctwas_wrapper.R | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/R/ctwas_wrapper.R b/R/ctwas_wrapper.R index 63db18a3..645b4b18 100644 --- a/R/ctwas_wrapper.R +++ b/R/ctwas_wrapper.R @@ -68,12 +68,11 @@ trim_ctwas_variants <- function(region_data, twas_weight_cutoff = 1e-5, cs_min_c high_pip_variants <- names(context_pip[context_pip > min_pip_cutoff])[names(context_pip[context_pip > min_pip_cutoff]) %in% rownames(weight_list$wgt)] selected_variants_by_context <- unique(c(selected_variants_by_context, high_pip_variants)) - if (length(selected_variants_by_context) < max_num_variants) { - remaining_var_num <- max_num_variants - length(selected_variants_by_context) - available_variants <- setdiff(names(context_pip)[names(context_pip) %in% rownames(weight_list$wgt)], selected_variants_by_context) - context_pip <- context_pip[available_variants] - selected_variants_by_context <- c(selected_variants_by_context, names(context_pip[order(-context_pip)])[1:remaining_var_num]) - } + # prioritize SNPs based on PIP if max_num_variants different from Inf + available_variants <- intersect(rownames(weight_list$wgt), names(context_pip)) + prioritized <- unique(c(selected_variants_by_context, setdiff(available_variants, selected_variants_by_context))) + prioritized <- prioritized[order(-context_pip[prioritized])] + selected_variants_by_context <- head(prioritized, max_num_variants) weight_list$wgt <- weight_list$wgt[selected_variants_by_context, , drop = FALSE] return(weight_list) }