R phylo 对象:如何连接节点标签和节点号 [英] R phylo object: how to connect node label and node number

查看:20
本文介绍了R phylo 对象:如何连接节点标签和节点号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

R 中的 phylo 对象可以有内部节点标签(phylo_obj$node.label),但许多 R 函数使用节点编号而不是节点标签.甚至 phylo 对象本身也使用节点编号来描述边 (phylo_obj$edge),并且似乎没有将内部节点标签直接映射到用于 phylo_obj$edge<的这些节点编号/代码>.如何将节点标签(例如,NodeA"或Artiodactyla")映射到节点编号(例如,250 或 212)?我找不到任何 R 函数或通常有关此的任何文档.

A phylo object in R can have internal node labels (phylo_obj$node.label), but many R functions use node numbers instead of the node labels. Even the phylo object itself uses node numbers to describe the edges (phylo_obj$edge) and does not seem to have a direct mapping of internal node labels to these node numbers used for phylo_obj$edge. How do I map node labels (eg., "NodeA" or "Artiodactyla") to the node number (eg., 250 or 212)? I can't find any R functions or generally any docs on this.

推荐答案

不完全确定这里的目标是什么,但是如果您想选择边表中的特定节点编号并且在节点标签向量中有等效项,您可以简单地使用 tree$node.label[node_number - Ntip(tree)].

Not exactly sure what is the objective here but if you want to select specific node numbers in the edge table and there equivalent in the node labels vector, you can simply use tree$node.label[node_number - Ntip(tree)].

更多细节:

## Simulating a random tree
set.seed(1)
my_tree <- rtree(10)
my_tree$node.label <- paste0("node", seq(1:9))
## Method 1: selecting a node of interest (e.g. MRCA)
mrca_node <- getMRCA(my_tree, tip = c("t1", "t2"))
#[1] 16

mrca_node 现在是边缘表中节点的 ID(在本例中为大于 10 的数字).要选择等效的节点标签,您可以简单地从 mrca_node 中选择提示的数量:

mrca_node is now the ID of the node in the edge table (in this case a number higher than 10). To select the equivalent node label you can simply select the number of tips from the mrca_node:

## The node label for the mrca_node
my_tree$node.label[mrca_node-Ntip(my_tree)]
#[1] "node6"

或者,您可以从边缘表中选择您的节点标签

Alternatively, you can select your node labels from the edge table

## Method 2: directly extracting the nodes from the edge tables

node_labels_in_edge <- my_tree$node.label[my_tree$edge[,1]-Ntip(my_tree)]
tips_nodes <- my_tree$edge[,2]

select.tip.or.node <- function(element, tree) {
    ifelse(element < Ntip(tree)+1, tree$tip.label[element], tree$node.label[element-Ntip(tree)])
}

edge_table <- data.frame(
                "parent" = my_tree$edge[,1],
                "par.name" = sapply(my_tree$edge[,1], select.tip.or.node, tree = my_tree),
                "child" = my_tree$edge[,2],
                "chi.name" = sapply(my_tree$edge[,2], select.tip.or.node, tree = my_tree)
                )
#   parent par.name child chi.name
#1      11    node1    12    node2
#2      12    node2     1      t10
#3      12    node2    13    node3
#4      13    node3     2       t6
#5      13    node3     3       t9
#6      11    node1    14    node4
#7      14    node4    15    node5
#8      15    node5    16    node6
#9      16    node6     4       t1
#10     16    node6    17    node7
#11     17    node7     5       t2
#12     17    node7     6       t7
#13     15    node5     7       t3
#14     14    node4    18    node8
#15     18    node8    19    node9
#16     19    node9     8       t8
#17     19    node9     9       t4
#18     18    node8    10       t5

这篇关于R phylo 对象:如何连接节点标签和节点号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆