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>:

> 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>
> 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>:
>>
>>> 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>
>>> 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/
>>> > email: 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
>>> >> https://stat.ethz.ch/mailman/listinfo/r-sig-phylo
>>> >> Searchable archive at http://www.mail-archive.com/r-
>>> >> sig-ph...@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-ph...@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