0

同じトポロジーを持つ 2 つの系統樹があります (枝の長さを期待してください)。

R使用中ape

t1 <- ape::read.tree(file="",text="(((HS:72,((CP:30,CL:30.289473923):32,RN:62):10):2,(CS:63,BS:63):11):5,LA:79);")
t2 <- ape::read.tree(file="",text="(((((CP:39,CL:39):29,RN:68):9,HS:77):5,(BS:63,CS:63):19):14,LA:96);")
> ape::all.equal.phylo(t1,t2,use.edge.length = F,use.tip.label = T)
[1] TRUE

2つの枝の長さの平均を計算したいのですが、問題は、それらのトポロジーは同じですが、ノードが表される順序が同一ではなく、すべてのツリーノードがヒントとラベル付けされているわけではないため、単純なものではないと思います.結合ソリューション:

> head(tidytree::as_tibble(t1))
# A tibble: 6 x 4
  parent  node branch.length label
   <int> <int>         <dbl> <chr>
1     10     1          72   HS   
2     12     2          30   CP   
3     12     3          30.3 CL   
4     11     4          62   RN   
5     13     5          63   CS   
6     13     6          63   BS   
> tail(tidytree::as_tibble(t1))
# A tibble: 6 x 4
  parent  node branch.length label
   <int> <int>         <dbl> <chr>
1      8     8            NA NA   
2      8     9             5 NA   
3      9    10             2 NA   
4     10    11            10 NA   
5     11    12            32 NA   
6      9    13            11 NA   
> head(tidytree::as_tibble(t2))
# A tibble: 6 x 4
  parent  node branch.length label
   <int> <int>         <dbl> <chr>
1     12     1            39 CP   
2     12     2            39 CL   
3     11     3            68 RN   
4     10     4            77 HS   
5     13     5            63 BS   
6     13     6            63 CS   
> tail(tidytree::as_tibble(t2))
# A tibble: 6 x 4
  parent  node branch.length label
   <int> <int>         <dbl> <chr>
1      8     8            NA NA   
2      8     9            14 NA   
3      9    10             5 NA   
4     10    11             9 NA   
5     11    12            29 NA   
6      9    13            19 NA   

そのため、枝の長さのペアをどのように対応させて、それらの平均をとるのかは明確ではありません。

それらを一致させる方法、またはt2に従って並べ替える方法はありt1ますか?

おそらくphytools'matchNodesメソッドはそのためのものですが、正しく機能しているようには見えません:

phytools::matchNodes(t1, t2,method = "descendants")
     tr1 tr2
[1,]   8   8
[2,]   9   9
[3,]  10  10
[4,]  11  11
[5,]  12  12
[6,]  13  13

少なくとも、ヒントに正しく対応することを期待しています。つまり、次のことを意味します。

dplyr::left_join(dplyr::filter(tidytree::as_tibble(t1),!is.na(label)) %>% dplyr::select(node,label) %>% dplyr::rename(t1.node=node),
+                  dplyr::filter(tidytree::as_tibble(t2),!is.na(label)) %>% dplyr::select(node,label) %>% dplyr::rename(t2.node=node))
Joining, by = "label"
# A tibble: 7 x 3
  t1.node label t2.node
    <int> <chr>   <int>
1       1 HS          4
2       2 CP          1
3       3 CL          2
4       4 RN          3
5       5 CS          6
6       6 BS          5
7       7 LA          7

しかし、それは起こっていません。

各ノードの親がリストされているため、最終的にマッチングtree tibbleのための情報はこれらの にありますが、モードをマッチングするためにその情報を実際に使用するには、おそらくいくつかの再帰的な手順が必要です。

4

1 に答える 1

0

を引数として使用しているように見えます。これは、ヒント ラベルで内部ノードにラベルを付けると、次のapeようになります。makeNodeLabelmd5summethod

t1 <- ape::read.tree(file="",text="(((HS:72,((CP:30,CL:30.289473923):32,RN:62):10):2,(CS:63,BS:63):11):5,LA:79);")
t2 <- ape::read.tree(file="",text="(((((CP:39,CL:39):29,RN:68):9,HS:77):5,(BS:63,CS:63):19):14,LA:96);")

dplyr::left_join(tidytree::as_tibble(ape::makeNodeLabel(t1, method = "md5sum")) %>% dplyr::select(node,label) %>% dplyr::rename(t1.node=node),
                 tidytree::as_tibble(ape::makeNodeLabel(t2, method = "md5sum")) %>% dplyr::select(node,label) %>% dplyr::rename(t2.node=node))

Joining, by = "label"
# A tibble: 13 x 3
   t1.node label                            t2.node
     <int> <chr>                              <int>
 1       1 HS                                     4
 2       2 CP                                     1
 3       3 CL                                     2
 4       4 RN                                     3
 5       5 CS                                     6
 6       6 BS                                     5
 7       7 LA                                     7
 8       8 da5f57f0a757f7211fcf84c540d9531a       8
 9       9 9bffe86cf0a2650b6a3f0d494c0183a9       9
10      10 bcf7b41992a064acd2e3e66fee7fe2d4      10
11      11 d50e0698114c621b49322697267900b7      11
12      12 f0a8c7fa67831514e65cdadbc68c3d31      12
13      13 82ab4cf8ae4a4df14cf87a48dc2638e0      13
于 2021-09-03T05:18:52.863 に答える