Преобразование филогенетического дерева в фреймворк

Я ищу способ в R преобразовать филогенетическое дерево (формат Ньюика или класс «phylo») в фреймворк. Цель состоит в том, чтобы получить хорошее представление о том, какие подсказки спускаются с каждого узла дерева. Есть ли у кого-нибудь опыт работы с этой проблемой?

Я могу получить все метки наконечников из филогенетического дерева или все узлы-потомки из узла, но мне не удается получить метки наконечников, которые принадлежат определенному узлу.

#for a random tree x
x <- rtree(10, tip.label = LETTERS[1:10])

#get all tip labels by asking for tree information
> x

Phylogenetic tree with 10 tips and 9 internal nodes.

Tip labels:
    H, G, D, B, I, C, ...

Rooted; includes branch lengths.

#descendant nodes from a node
test <- phytools::getDescendants(x, node=5, curr=NULL)

#the package ggphylo seemed to have the answer to my problem, but it is no longer supported (last updates were in 2012)
ggphylo::tree.as.data.frame(x)

(Я думаю, что преобразование в фрейм данных - самый простой способ, но если вы знаете другой подход для получения подсказок потомков от узла, я открыт для всех возможных решений)


person kara    schedule 15.07.2019    source источник


Ответы (3)


Вы ищете граничную таблицу (т.е. таблицу, которая отображает связь между каждой вершиной и узлом)? Вы можете получить к нему доступ прямо в объекте phylo, используя:

## The edge table
x$edge

Вы можете найти более интересную визуализацию этого в следующий вопрос SO.

person Thomas Guillerme    schedule 16.07.2019

Функция compute.mr из пакета phytools преобразует филогению в ее матричное представление, которое может быть тем, что вы ищете.

x <- rtree(10, tip.label = LETTERS[1:10])
phytools::compute.mr(x, type = "matrix")
#   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# H "1"  "1"  "1"  "0"  "0"  "0"  "0"  "0" 
# E "1"  "1"  "1"  "0"  "0"  "0"  "0"  "0" 
# C "1"  "1"  "0"  "1"  "1"  "0"  "0"  "0" 
# I "1"  "1"  "0"  "1"  "1"  "0"  "0"  "0" 
# J "1"  "1"  "0"  "1"  "0"  "0"  "0"  "0" 
# F "1"  "0"  "0"  "0"  "0"  "1"  "0"  "0" 
# A "1"  "0"  "0"  "0"  "0"  "1"  "0"  "0" 
# D "0"  "0"  "0"  "0"  "0"  "0"  "1"  "0" 
# G "0"  "0"  "0"  "0"  "0"  "0"  "1"  "1" 
# B "0"  "0"  "0"  "0"  "0"  "0"  "1"  "1" 
person nya    schedule 16.07.2019

Спасибо за предложения. Я нашел коллегу с тем ответом, который искал. Функция prop.part из пакета ape дает хороший обзор всех подсказок для каждого узла. В результате получается список, а не фрейм данных, но он помогает.

list_all_tips <- c(prop.part(tree, check.labels = TRUE)) 
person kara    schedule 23.07.2019