diff --git a/workflow/scripts/report/allele_freq_tree_data.R b/workflow/scripts/report/allele_freq_tree_data.R index 9b20ce1..443f4fd 100644 --- a/workflow/scripts/report/allele_freq_tree_data.R +++ b/workflow/scripts/report/allele_freq_tree_data.R @@ -19,11 +19,13 @@ fix_negative_edge_length <- function(nj.tree) { ) %>% as.data.table() colnames(edge_infos) <- c("from", "to", "length") - nega_froms <- edge_infos[length < 0, sort(unique(from))] - for (nega_from in nega_froms) { - minus_length <- edge_infos[from == nega_from, ][order(length)][1, length] - edge_infos[from == nega_from, length := length - minus_length] - edge_infos[to == nega_from, length := length + minus_length] + while (any(edge_infos$length < 0)) { + nega_froms <- edge_infos[length < 0, sort(unique(from))] + for (nega_from in nega_froms) { + minus_length <- edge_infos[from == nega_from, ][order(length)][1, length] + edge_infos[from == nega_from, length := length - minus_length] + edge_infos[to == nega_from, length := length + minus_length] + } } nj.tree$edge.length <- edge_infos$length nj.tree