Florian and list,

Great ideas to use getDescendants! Worked as advertised. Thanks for the
help!


BL

On Thu, Sep 15, 2016 at 8:55 AM, Liam J. Revell <liam.rev...@umb.edu> wrote:

> I'm sure Florian's solution works, though I haven't tried it.
>
> Here is another one that may work that I just posted to my blog:
>
> http://blog.phytools.org/2016/09/collapsing-clades-of-foo-huh.html
>
> All the best, Liam
>
> Liam J. Revell, Associate Professor of Biology
> University of Massachusetts Boston
> web: http://faculty.umb.edu/liam.revell/
> email: liam.rev...@umb.edu
> blog: http://blog.phytools.org
>
> On 9/15/2016 1:57 AM, Florian Boucher wrote:
>
>> I don't really know what you mean by 'hard-coding', but here is what I
>> could think of (it is probably not optimal, but should work pretty
>> quickly if your tree does not have thousands of tips):
>>
>> First, borrow 'getDescendants' from phytools:
>>
>> getDescendants<-function(tree,node,curr=NULL){
>>   if(is.null(curr)) curr<-vector()
>>   daughters<-tree$edge[which(tree$edge[,1]==node),2]
>>   curr<-c(curr,daughters)
>>   w<-which(daughters>=length(tree$tip))
>>   if(length(w)>0) for(i in 1:length(w))
>>     curr<-getDescendants(tree,daughters[w[i]],curr)
>>   return(curr)
>> }
>>
>> Then, traverse the tree and check whether each clade contains only tips
>> named 'foo'. If this is the case, rename the first tip and label others
>> 'to_rm'.
>>
>> # assuming your tree is dichotomic, tips are numbered 1:ntips and
>> internal nodes (ntips+1):(2*ntips-1)
>> ntips=length(tree$tip.label)
>> reorder.phylo(tree,order='cladewise') # to make sure that we always
>> traverse the tree from root to tips
>> for (i in c(ntips+1):(2*ntips-1)){
>>     des= getDescendants(tree,node=i,curr=NULL)
>>     tips=des[which(des<(ntips+1))] ; intern=des[-which(des<(ntips+1))]
>>     if (all(tree$tip.label[tips]=='foo')){
>>         tree$tip.label[tips[1]]=paste(length(tips),"foo's",sep='_')
>>         tree$tip.label[tips[2:length(tips)]]='to_rm'
>>     }
>> }
>>
>> plot(tree)
>>
>> # remove tips labelled 'to_rm'
>> tree2=drop.tip(tree,tip='to_rm')
>> plot(tree2)
>>
>> Let's hope this works as you wished.
>>
>> Cheers,
>> Florian
>>
>>
>> 2016-09-14 22:04 GMT+02:00 branchlizard . <branch.liz...@gmail.com
>> <mailto:branch.liz...@gmail.com>>:
>>
>>     Florian and list,
>>
>>     What is your preferred method to go about this? phy$tip.label? If
>>     so, how would one label a tip label from each clade of foo's without
>>     having to hard code the clade number? I am trying to prevent any
>>     hard coding.
>>
>>     BL
>>
>>     On Wed, Sep 14, 2016 at 3:46 PM, Florian Boucher
>>     <floflobouc...@gmail.com <mailto:floflobouc...@gmail.com>> wrote:
>>
>>         Hi Branchlizard and list,
>>
>>         in order to do this you would first need to rename one of the
>>         foo's in each clade (I would always rename the first one) as '6
>>         foo's', '4 foo's', etc.
>>         Then you can apply drop.tip on all the foos, as you did before.
>>
>>         I hope this helps.
>>
>>         Cheers,
>>         Florian
>>
>>         2016-09-14 21:32 GMT+02:00 branchlizard .
>>         <branch.liz...@gmail.com <mailto:branch.liz...@gmail.com>>:
>>
>>             I would like to turn this
>>
>>             http://i.imgur.com/chLdFmZ.jpg
>>
>>             into this
>>
>>             http://i.imgur.com/vSoe6mu.jpg
>>
>>
>>             My dataset and phylogeny is much more complex than this, but
>>             this is the
>>             basic idea.
>>
>>
>>             BL
>>
>>
>>
>>             On Mon, Sep 12, 2016 at 8:16 PM, Liam J. Revell
>>             <liam.rev...@umb.edu <mailto:liam.rev...@umb.edu>> wrote:
>>
>>             > I'm sure this is possible, but I really don't understand
>>             the question.
>>             > Maybe you could draw what you have in mind on a piece of
>>             paper and post a
>>             > picture of the paper....
>>             >
>>             > All the best, Liam
>>             >
>>             > Liam J. Revell, Associate Professor of Biology
>>             > University of Massachusetts Boston
>>             > web: http://faculty.umb.edu/liam.revell/
>>             <http://faculty.umb.edu/liam.revell/>
>>             > email: liam.rev...@umb.edu <mailto:liam.rev...@umb.edu>
>>
>>             > blog: http://blog.phytools.org
>>             >
>>             >
>>             > On 9/12/2016 2:46 PM, branchlizard . wrote:
>>             >
>>             >> I have posted this question at Stack Overflow. I hope
>>             this doesn't violate
>>             >> any community rules about double posting.
>>             >>
>>             >> I probably could have worded the title better, but I am
>>             wanting to
>>             >> collapse
>>             >> any clade within a phylogenetic tree (even if the clade
>>             has one member)
>>             >> which has a tip label of "foo" and then count the number
>>             of tips which
>>             >> were
>>             >> dropped from that specific clade and create a branch with
>>             a tip label
>>             >> displaying 35 foos.
>>             >>
>>             >> The counting portion is easy; however, when I use
>>             >>
>>             >> drop.tip(rooted.tree,tip=which
>> (rooted.tree$tip.label=='foo')
>>             >> ,subtree=TRUE)
>>             >>
>>             >> the dropped tips do not maintain their position in the
>>             tree. Rather, they
>>             >> are all grouped at the end (counted properly however). Is
>>             there anyway to
>>             >> collapse a clade by tip labels and maintain its position
>>             >>
>>             >>
>>             >>
>>             >> BranchLizard
>>             >>
>>             >>         [[alternative HTML version deleted]]
>>             >>
>>             >> _______________________________________________
>>             >> R-sig-phylo mailing list - R-sig-phylo@r-project.org
>>             <mailto:R-sig-phylo@r-project.org>
>>             >> https://stat.ethz.ch/mailman/listinfo/r-sig-phylo
>>             <https://stat.ethz.ch/mailman/listinfo/r-sig-phylo>
>>             >> Searchable archive at http://www.mail-archive.com/r-
>>             >> sig-ph...@r-project.org/ <http://sig-ph...@r-project.org/>
>>             >>
>>             >>
>>
>>                     [[alternative HTML version deleted]]
>>
>>             _______________________________________________
>>             R-sig-phylo mailing list - R-sig-phylo@r-project.org
>>             <mailto:R-sig-phylo@r-project.org>
>>             https://stat.ethz.ch/mailman/listinfo/r-sig-phylo
>>             <https://stat.ethz.ch/mailman/listinfo/r-sig-phylo>
>>             Searchable archive at
>>             http://www.mail-archive.com/r-sig-phylo@r-project.org/
>>             <http://www.mail-archive.com/r-sig-phylo@r-project.org/>
>>
>>
>>
>>
>>

        [[alternative HTML version deleted]]

_______________________________________________
R-sig-phylo mailing list - R-sig-phylo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-phylo
Searchable archive at http://www.mail-archive.com/r-sig-phylo@r-project.org/

Reply via email to