Klaus- Oh, that worked rather splendid! Thanks for letting me know. > system.time(desc<-Descendants(res_tree,edge_end)) user system elapsed 1.56 0.00 1.56
-Dave On Sun, Mar 6, 2011 at 3:22 PM, Klaus Schliep <klaus.schl...@gmail.com> wrote: > Hi David, > > you can supply Descendents (from phangorn) with a vector instead of > using sapply. I should have mentioned this in the help file. > If your vector (edge_end) is long enough (I don't have a exact number > here) this can be much faster than using sapply as some results are > reused. > Here are some timings: > >> set.seed(123) >> res_tree = rtree(1700) >> edge_end = unique(res_tree$edge[,1]) >> system.time(desc1<-sapply(edge_end,function(x) Descendants(res_tree,x))) > user system elapsed > 54.51 0.00 54.87 >> system.time(desc2<-Descendants(res_tree,edge_end)) > user system elapsed > 0.75 0.00 0.75 >> system.time(desc3<-sapply(edge_end,function(x) node.tips(res_tree,x))) > user system elapsed > 4.07 0.00 4.07 > > > Cheers, > Klaus > > > > On 3/6/11, David Bapst <dwba...@uchicago.edu> wrote: >> Hello all, >> I'm currently trying to measure a parameter over a large number of >> large trees (>1700 tips), and part of this calculation requires >> knowing the tip taxa descended from each node (I must compare the >> difference in tip values among taxa descended from a node). Because I >> must do this many times, I decided to compare the efficiency of >> several methods for doing this in various R libraries with >> system.time() (as Liam did recently with some BM simulation functions >> in some recent blog posts). As I feel that others may benefit from >> this comparison of methods, I am posting the results to this list. >> >> Geiger's node.leaves() is much faster than the alternatives, although >> at ~13s a run, it is still not a particularly speedy process. I didn't >> need the actual tip.labels, so I took node.leaves() and made it as >> lean as possible, to produce node.tips(), below. That cut the run time >> down to ~9 sec. >> >> node.tips<-function (phy, node){ >> n <- length(phy$tip.label) >> if (node <= n){node}else{ >> l<- numeric() >> d<- phy$edge[which(phy$edge[,1]==node),2] >> for(j in d){if(j <= n){l <- c(l, j)}else{l<-c(l, >> node.tips(phy,j))}} >> l}} >> >> If anyone knows of another alternative that might be faster, I would >> greatly appreciate any suggestions. >> -Dave Bapst, UChicago Geosci >> >> Using the modified node.leaves() function from geiger, node.tips() >> >>> system.time(desc<-sapply(edge_end,function(x) node.tips(res_tree,x))) >> user system elapsed >> 9.39 0.00 9.44 >> >> Using node.leaves() in geiger >> >>> system.time(desc<-sapply(edge_end,function(x) node.leaves(res_tree,x))) >> user system elapsed >> 13.29 0.02 13.34 >> >> Using Descendants() in phangorn >> >>> system.time(desc<-sapply(edge_end,function(x) Descendants(res_tree,x))) >> user system elapsed >> 75.60 0.10 76.83 >> >> Using listTips() in adephylo >> >>> system.time(desc_list<-c(as.list(1:Ntip(res_tree)),listTips(res_tree))) >> user system elapsed >> 75.27 2.93 87.28 >> >> Using descendants() in phylobase >> >>> system.time(desc<-sapply(edge_end,function(x) >>> descendants(res_tree4,x,type="tips"))) >> user system elapsed >> 149.56 0.67 155.15 >> >> Using nodeDecendants() in maticce (note that translating the tree >> into ouchtree format was prohibitively very lengthy) >> >>> system.time(res_tree_ou<-ape2ouch(res_tree)) >> user system elapsed >> 84.01 0.13 85.34 >>> system.time(desc<-sapply(edge_end,function(x) >>> nodeDescendents(res_tree_ou,x))) >> user system elapsed >> 65.91 0.23 68.47 >> >> -- >> David Bapst >> Dept of Geophysical Sciences >> University of Chicago >> 5734 S. Ellis >> Chicago, IL 60637 >> http://home.uchicago.edu/~dwbapst/ >> >> _______________________________________________ >> R-sig-phylo mailing list >> R-sig-phylo@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-sig-phylo >> > > > -- > Klaus Schliep > Université Paris 6 (Pierre et Marie Curie) > 9, Quai Saint-Bernard, 75005 Paris > -- David Bapst Dept of Geophysical Sciences University of Chicago 5734 S. Ellis Chicago, IL 60637 http://home.uchicago.edu/~dwbapst/ _______________________________________________ R-sig-phylo mailing list R-sig-phylo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-phylo