Как получить правильный порядок меток наконечников в 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