【发布时间】:2019-04-26 18:44:24
【问题描述】:
我正在尝试识别由系统发育树中的节点对分隔的边数。例如,假设内部分支 1 由节点 22 和 23 绑定。当然,这可以通过 nodelabels() 和 edgelabels() 直观地完成,但我正在处理具有数千个技巧的系统发育,因此需要一种自动化的方式。
是否有任何命令可以将节点号与边号匹配?
【问题讨论】:
-
查看
ape包中的mrca和getMRCA函数。
我正在尝试识别由系统发育树中的节点对分隔的边数。例如,假设内部分支 1 由节点 22 和 23 绑定。当然,这可以通过 nodelabels() 和 edgelabels() 直观地完成,但我正在处理具有数千个技巧的系统发育,因此需要一种自动化的方式。
是否有任何命令可以将节点号与边号匹配?
【问题讨论】:
ape 包中的mrca 和getMRCA 函数。
您可以将存储在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+),因为所有边缘属性都是自动的。
【讨论】:
nodes_of_interest。
match 为感兴趣的边缘(例如my_edges <- c(12, 32, 51))获取两种颜色(例如my_colors <- c("orange", "blue"))的逻辑向量,如下my_colors[as.numeric(is.na(match(1:Nedge(tree), my_edges)))+1]。