【问题标题】:How to identify edge number from node path in a phylogeny?如何从系统发育中的节点路径中识别边缘数?
【发布时间】:2019-04-26 18:44:24
【问题描述】:

我正在尝试识别由系统发育树中的节点对分隔的边数。例如,假设内部分支 1 由节点 2223 绑定。当然,这可以通过 nodelabels()edgelabels() 直观地完成,但我正在处理具有数千个技巧的系统发育,因此需要一种自动化的方式。

是否有任何命令可以将节点号与边号匹配?

【问题讨论】:

  • 查看ape 包中的mrcagetMRCA 函数。

标签: r phylogeny ape-phylo


【解决方案1】:

您可以将存储在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+),因为所有边缘属性都是自动的。

【讨论】:

  • 嗨,Thomas,很抱歉在这里耽搁了很长时间,感谢您的回答!但我真正在寻找的是一种自动化的方式来做到这一点。我正在研究一棵有 8,000 多个提示的树,因此手动查看它会非常令人生畏。你知道是否有一个函数可以获取节点列表并输出由这些节点分隔的相应边吗?假设我有节点:“9148 9149 9151 9155 9157 9158 9159 9164 9167 9168 9169 9172 9174 9178 9179 9183 9184 9186 9188 58”我能以某种方式获得相应的边列表吗?
  • 我不明白为什么会有问题。我已经更新了帖子以说明如何使用这个小示例树进行操作,但您可以完全将任何节点号归因于 nodes_of_interest
  • 哦,这太棒了!我认为它运作良好。最后一个愚蠢的问题是:这是一个只为给定颜色的系统发育的特定边缘(比如边缘 12、32、51)着色的函数吗?我知道如何做到这一点的方法是通过 edge.color 参数,但要做到这一点,我必须为系统发育的每个分支(在我的例子中超过 9,000 个)构建一个带有颜色名称的变量。我很确定一定有一种更简单的方法可以做到这一点,但是像 plotBranchbyTrait 或 paintBranches 这样的东西不会起作用。非常感谢!
  • 您可以使用match 为感兴趣的边缘(例如my_edges &lt;- c(12, 32, 51))获取两种颜色(例如my_colors &lt;- c("orange", "blue"))的逻辑向量,如下my_colors[as.numeric(is.na(match(1:Nedge(tree), my_edges)))+1]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多