Как получить правильный порядок меток наконечников в APE после вызова функции ladderize

Я пытаюсь упорядочить строки фрейма данных на основе меток кончиков, найденных в филогенетическом дереве. Я собирался сделать это, используя match Функция похожа на ответ на этот вопрос, однако я застрял вызвать tip.label собственность ape Филологический объект не изменяется, если вы переупорядочиваете узлы, используя ladderize функция.

library(ape)
tree <- read.tree(text = "(((A,B),(C,D)),E);")
tree2 <- ladderize(tree, right = FALSE)
tree$tip.label
#> [1] "A" "B" "C" "D" "E"
tree2$tip.label
#> [1] "A" "B" "C" "D" "E"

Обратите внимание, что порядок tip.label не изменился, хотя визуальное представление дерева не изменилось. В этом простом примере визуальный порядок дерева после ladderize функция E A B C D (чтение снизу вверх на дереве после построения). Как я могу получить копию tip.label вектор, где порядок отражает новый порядок узлов в дереве?

2 ответа

Кажется, ключ в том, чтобы посмотреть на edge имущество. Подсказки - это всегда первые узлы, которым будет присвоен идентификатор, который будет просто соответствовать позиции в tip.label вектор.

library(ape)
tree <- read.tree(text = "(((A,B),(C,D)),E);")
tree2 <- ladderize(tree, right = FALSE)
tree$tip.label
#> [1] "A" "B" "C" "D" "E"
tree2$tip.label
#> [1] "A" "B" "C" "D" "E"
plot(tree2)
nodelabels()
tiplabels()

Первый шаг - отфильтровать внутренние узлы от второго столбца матрицы ребер:

is_tip <- tree2$edge[,2] <= length(tree2$tip.label)
#> [1]  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE

ordered_tips <- tree2$edge[is_tip, 2]
#> [1] 5 1 2 3 4

Затем вы можете использовать этот вектор, чтобы извлечь подсказки в правильном порядке:

tree2$tip.label[ordered_tips]
#> [1] "E" "A" "B" "C" "D"

для другого пакета (ggtree), но та же проблема, которую я цитирую: «Чтобы получить порядок наконечника графика ggtree, сделайте что-то вроде этого: data(bird.orders) p <- ggtree::ggtree(bird.orders) p[["data"]]# извлечь столбцы 'label' и 'y'

с этого веб-сайта, и пакет... хотя сколько пакетов R нужно, чтобы заменить лампочку? https://rdrr.io/github/joelnitta/jntools/man/get_tips_in_ape_plot_order.html

Другие вопросы по тегам