@@ -47,15 +47,73 @@ getSubstitutionRatios = function(
4747 if (verbose ) message(" Summarising..." )
4848 mutation_table = summariseMutationTableToAAsAndSyns(mutation_table )
4949
50- if (calculate_p_values ) {
51- # fmt: skip
52- if (verbose ) message(" Calculating p-values..." )
53- mutation_table = purrr :: map(
54- mutation_table ,
55- ~ addPValuesToMutationTable(.x , nuc_rates , sampling_function )
50+ # fmt: skip
51+ if (isTRUE(calculate_p_values )) {
52+ p_value_positions = list (
53+ aas = unique(mutation_table [[" aas" ]][[" at" ]]),
54+ nucs = unique(mutation_table [[" nucs" ]][[" at" ]])
5655 )
56+ min_LCR = - Inf
57+ max_LCR = + Inf
58+ } else if (is.list(calculate_p_values )){
59+
60+ if (! all(names(calculate_p_values ) %in% c(" aas" , " nucs" , " min_LCR" , " max_LCR" ))){
61+ stop(" " )
62+ }
63+
64+ p_value_positions = list ()
65+
66+ if (! " aas" %in% names(calculate_p_values )){
67+ p_value_positions [[" aas" ]] = positions
68+ } else {
69+ p_value_positions [[" aas" ]] = calculate_p_values [[" aas" ]]
70+ }
71+
72+ if (! " nucs" %in% names(calculate_p_values )){
73+ p_value_positions [[" nucs" ]] = positions
74+ } else {
75+ p_value_positions [[" nucs" ]] = calculate_p_values [[" nucs" ]]
76+ }
77+
78+ if (! " min_LCR" %in% names(calculate_p_values )){
79+ min_LCR = - Inf
80+ } else {
81+ min_LCR = calculate_p_values [[" min_LCR" ]]
82+ }
83+
84+ if (! " max_LCR" %in% names(calculate_p_values )){
85+ max_LCR = Inf
86+ } else {
87+ max_LCR = calculate_p_values [[" max_LCR" ]]
88+ }
89+
90+ } else if (isFALSE(calculate_p_values )){
91+ return (mutation_table )
92+ } else {
93+ stop(" calculate_p_values should be TRUE, FALSE, or list" )
5794 }
5895
96+ # fmt: skip
97+ if (verbose ) message(" Calculating p-values..." )
98+
99+ mutation_table = purrr :: map2(
100+ mutation_table [c(" aas" , " nucs" )],
101+ p_value_positions [c(" aas" , " nucs" )],
102+ function (mutation_table , positions ) {
103+ bind_rows(
104+ addPValuesToMutationTable(
105+ filter(
106+ mutation_table ,
107+ at %in% positions | dplyr :: between(log2(ratio ), min_LCR , max_LCR )
108+ ),
109+ nuc_rates ,
110+ sampling_function
111+ ),
112+ filter(mutation_table , ! at %in% positions ) %> % mutate(p = NA )
113+ )
114+ }
115+ )
116+
59117 mutation_table
60118}
61119
0 commit comments