Вы можете использовать таблицу ребер, хранящуюся в объекте phylo
, как $edge
:
## A random tree
tree <- rtree(5)
tree$edge
# [,1] [,2]
#[1,] 6 7
#[2,] 7 1
#[3,] 7 2
#[4,] 6 8
#[5,] 8 3
#[6,] 8 9
#[7,] 9 4
#[8,] 9 5
Способ чтения этих таблиц: номера строк - это номера ребер (то, что выпосле) первый столбец является родительским узлом, а второй столбец - дочерним наконечником / узлом:
## The edge table
edge_table <- tree$edge
rownames(edge_table) <- paste("edge", 1:nrow(edge_table), sep = ""))
colnames(edge_table) <- c("parent", "child")
edge_table
# parent child
#edge1 6 7
#edge2 7 1
#edge3 7 2
#edge4 6 8
#edge5 8 3
#edge6 8 9
#edge7 9 4
#edge8 9 5
Узлы / подсказки с 1 по 5 (Ntip(tree)
) являются подсказками, а затем 6 - первымузел (например, корень) до Ntip(tree) + Nnode(tree)
.
Чтобы выбрать любые ребра на основе узлов, вы можете выполнить следующее:
## Getting the nodes of interest
nodes_of_interest <- c(6, 7, 8)
## Getting the edges connecting to the nodes
edge_parent <- rownames(edge_table)[edge_table[,1] %in% nodes_of_interest]
edge_child <- rownames(edge_table)[edge_table[,2] %in% nodes_of_interest]
Это, конечно, обобщается на любой размер дерева (например, 8000+), поскольку все атрибуты ребер выполняются автоматически.