Hi Ting-Wen,
here is a short function to do this (also available at
https://gist.github.com/skembel/7240466 ):

#prune tree to get rid of very closely related tips
otuPhylo <- function(phy, cutoff=0.05) {

    dists <- cophenetic(phy)
    diag(dists) <- NA
    pruned <- vector()

    for (i in phy$tip.label) {
        if (!(i %in% pruned)) {
            d <- na.omit(dists[i,])
            pruned <- c(pruned, names(which(d <= cutoff)))
        }
    }

    if (length(pruned) > 0) {
        print("Dropping the following taxa:")
        print(pruned)
        return(drop.tip(phy, pruned))
    }
    else {
        return(phy)
    }

}

Best regards,
Steve

On Thu, Mar 3, 2016 at 2:13 PM, Ting-Wen Timothy Chen <tch...@gwdg.de>
wrote:

> Hi all,
>
> I would like to prune several taxa with short distances between each other
> from a tree by setting a specific threshold and keep one of these taxa, but
> in the end I got all these taxa out...
>
> Following is a simple example I used, but ended in a wrong tree, not I
> expected.
> # the original phylogeny
>
> tree.ori<-cat("(A:6,(B:4,(C:1,D:1,(E:0.5,F:0.5):0.5):3):2);",file="tree.ori.tre")
> tree.ori1<-read.tree("tree.ori.tre")
> plot(tree.ori1) # the original phylogeny
>
> # I want to make a final phylogeny by pruning the taxa of short distance,
> here shorter than 3. This will result in tree like this:
> tree.fin<-cat("(A:6,(B:4,C:4):2);",file="tree.fin.tre")
> tree.fin1<-read.tree("tree.fin.tre")
> plot(tree.fin1) # the expected final phylogeny, C can be replaced by D, E
> or F.
> tree.fin1.dist<-cophenetic(tree.fin1)
> tree.fin1.dist # and a distance metrix like this (C, D, E or F present)
>
> # following are what I did on the original tree:
> tree.ori1.dist<-cophenetic(tree.ori1)
> tree.ori1.dist # the original distance metrix, with 6 taxa
> threshold<-3 # set the minimal distance between taxa as 3
> diag(tree.ori1.dist) <- threshold + 1
> ind <- apply(tree.ori1.dist, 1, min) > 3
> diag(tree.ori1.dist) <- 0
> tree.ori1.dist1 <- tree.ori1.dist[ind,ind]
> tree.ori1.dist1 # however, the brench of C,D,E,F was removed...
>
> Is there any function in R which allows to do this?
>
> Thank you very much!
>
> All the best
> Ting-Wen
> --
> Ting-Wen Chen
> J.F. Blumenbach Institute of Zoology and Anthropology
> Georg August University Goettingen
> Berliner Str. 28
> D-37073 Goettingen, Germany
> Tel: +49-55139-10943
>
> _______________________________________________
> 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/
>



-- 
______________________________________________
Steven Kembel - steve.kem...@gmail.com
http://kembellab.ca

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