Как определить номер ребра из пути узла в филогении? - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь определить номера ребер, разделенных парами узлов в филогенетическом дереве.Например, скажем, что внутренняя ветвь 1 связана узлами 22 * ​​1006 * и 23 .Конечно, это можно сделать визуально с nodelabels() и edgelabels(), но я работаю с филогенией с тысячами подсказок и, следовательно, нуждаюсь в автоматическом способе.

Есть ли какая-либо команда для сопоставления номеров узловс номерами ребер?

1 Ответ

0 голосов
/ 08 мая 2019

Вы можете использовать таблицу ребер, хранящуюся в объекте 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+), поскольку все атрибуты ребер выполняются автоматически.

...