This new code works perfectly for me. Thanks so much everyone for helping me to solve this issue in record time!
Kamila > On Jan 6, 2017, at 6:39 AM, Emmanuel Paradis <emmanuel.para...@ird.fr> wrote: > > I paste below the new code of extract.clade for those who want to try it. > > Best, > > Emmanuel > > ######################################################################## > extract.clade <- function(phy, node, root.edge = 0, interactive = FALSE) > { > n <- length(phy$tip.label) > if (interactive) { > cat("Click close to the node...\n") > node <- identify(phy)$nodes > } else { > if (length(node) > 1) { > node <- node[1] > warning("only the first value of 'node' has been considered") > } > if (is.character(node)) { > if (is.null(phy$node.label)) > stop("the tree has no node labels") > node <- match(node, phy$node.label) + n > if (is.na(node)) stop("'node' not among the node labels.") > } > if (node <= n) > stop("node number must be greater than the number of tips") > } > if (node == n + 1L) return(phy) > keep <- prop.part(phy)[[node - n]] > drop.tip(phy, (1:n)[-keep], root.edge = root.edge, rooted = TRUE) > } > ######################################################################## > > Le 06/01/2017 à 10:17, Emmanuel Paradis a écrit : >> Hi, >> >> Klaus is right: extract.clade() fails if the tree has been rooted with >> resolve.root = TRUE before. I'm going to rewrite the function calling >> drop.tip (which will be safer). In the meantime, Klaus's function should >> work for Kamila. >> >> Best, >> >> Emmanuel >> >> Le 06/01/2017 à 05:17, Klaus Schliep a écrit : >>> I had a look at the tree. There seems a bug in extract.clades, when the >>> tree was rooted before with the root() function. extract.clade() seem to >>> expect some ordering of nodes which seems not satisfied (and it looks as >>> it was written a long time ago). >>> >>> I just wrote a small function (easier than to debug the old one) which >>> should do the same and it seems to work: >>> >>> library(phangorn) >>> >>> extract.clade2 <- function(phy, node){ >>> if(!(node %in% phy$edge[,1])) stop("node number must be greater than >>> the number of tips") >>> drop.tip(phy, setdiff(1:Ntip(phy), Descendants(phy, node)[[1]])) >>> } >>> >>> Klaus >>> >>> >>> >>> On Jan 5, 2017 10:25 PM, "Joseph W. Brown" <josep...@umich.edu >>> <mailto:josep...@umich.edu>> wrote: >>> >>> Hmm. Maybe something wonky with your tree? I simulated a 17-tip tree >>> and tried things out: >>> >>> phy <- rtree(17); >>> rootID <- length(phy$tip.label) + 1; >>> counter <- 1; >>> for (i in rootID:max(phy$edge[,1])) { >>> clade <- extract.clade(phy, i); >>> # do something. just printing clade properties here >>> print(paste0("clade ", counter, " (node ", i, ") has ", >>> length(clade$tip.label), " tips.")); >>> counter <- counter + 1; >>> } >>> >>> [1] "clade 1 (node 18) has 17 tips." >>> [1] "clade 2 (node 19) has 11 tips." >>> [1] "clade 3 (node 20) has 10 tips." >>> [1] "clade 4 (node 21) has 4 tips." >>> [1] "clade 5 (node 22) has 3 tips." >>> [1] "clade 6 (node 23) has 2 tips." >>> [1] "clade 7 (node 24) has 6 tips." >>> [1] "clade 8 (node 25) has 5 tips." >>> [1] "clade 9 (node 26) has 3 tips." >>> [1] "clade 10 (node 27) has 2 tips." >>> [1] "clade 11 (node 28) has 2 tips." >>> [1] "clade 12 (node 29) has 6 tips." >>> [1] "clade 13 (node 30) has 2 tips." >>> [1] "clade 14 (node 31) has 4 tips." >>> [1] "clade 15 (node 32) has 3 tips." >>> [1] "clade 16 (node 33) has 2 tips." >>> >>> and had no problem. Maybe post your tree here? >>> >>> JWB >>> ________________________________________ >>> Joseph W. Brown >>> Post-doctoral Researcher, Smith Laboratory >>> University of Michigan >>> Department of Ecology & Evolutionary Biology >>> Room 2071, Kraus Natural Sciences Building >>> Ann Arbor MI 48109-1079 >>> josep...@umich.edu <mailto:josep...@umich.edu> >>> >>> >>> >>> > On 5 Jan, 2017, at 17:18, Kamila Naxerova <knaxer...@partners.org >>> <mailto:knaxer...@partners.org>> wrote: >>> > >>> > Dear Joseph, >>> > >>> > thanks so much. This is exactly what I need! >>> > >>> > I am running into some problems that I don’t understand though. In >>> my case, rootID is 18, and max(phy$edge[,1]) is 33. When I try to >>> execute your loop, this happens: >>> > >>> > > extract.clade(phy, 18) >>> > >>> > Phylogenetic tree with 17 tips and 16 internal nodes. >>> > >>> > Tip labels: >>> > X1, X8, X9, X10 ... >>> > >>> > Rooted; includes branch lengths. >>> > >>> > So far so good… but then I keep getting these errors: >>> > >>> > > extract.clade(phy, 19) >>> > Error in phy$edge[, 2] : incorrect number of dimensions >>> > > extract.clade(phy, 20) >>> > Error in phy$edge[, 2] : incorrect number of dimensions >>> > >>> > Not sure why extract.clade produces these errors. 19-23 don’t >>> work, 24-26 work, 27 produces the error again, 28 works etc. >>> > >>> > Thanks again. >>> > >>> > Kamila >>> > >>> > >>> >> On Jan 5, 2017, at 4:12 PM, Joseph W. Brown <josep...@umich.edu >>> <mailto:josep...@umich.edu> <mailto:josep...@umich.edu >>> <mailto:josep...@umich.edu>>> wrote: >>> >> >>> >> Not sure if I understand the problem completely, but this should >>> allow you to examine all of the clades (and should work if >>> polytomies are involved): >>> >> >>> >> # for tree phy >>> >> rootID <- length(phy$tip.label) + 1; >>> >> for (i in rootID:max(phy$edge[,1])) { >>> >> clade <- extract.clade(phy, i); >>> >> # do something >>> >> } >>> >> >>> >> This includes the root node (i.e. whole tree), but that can be >>> changed. This can be rewritten as an lapply if necessary. >>> >> >>> >> HTH. >>> >> JWB >>> >> ________________________________________ >>> >> Joseph W. Brown >>> >> Post-doctoral Researcher, Smith Laboratory >>> >> University of Michigan >>> >> Department of Ecology & Evolutionary Biology >>> >> Room 2071, Kraus Natural Sciences Building >>> >> Ann Arbor MI 48109-1079 >>> >> josep...@umich.edu <mailto:josep...@umich.edu> >>> <mailto:josep...@umich.edu <mailto:josep...@umich.edu>> >>> >> >>> >> >>> >> >>> >>> On 5 Jan, 2017, at 15:50, Kamila Naxerova >>> <knaxer...@partners.org <mailto:knaxer...@partners.org> >>> <mailto:knaxer...@partners.org <mailto:knaxer...@partners.org>>> >>> wrote: >>> >>> >>> >>> Hi all, >>> >>> >>> >>> I would like to break a phylogenetic tree into all possible >>> clades and then examine each one of them for certain characteristics. >>> >>> >>> >>> I am writing some code to do this from scratch, but it’s getting >>> pretty cumbersome quickly. >>> >>> >>> >>> I was wondering whether there are some functions out there >>> already that could help me with this task? >>> >>> >>> >>> Thanks so much for any help. >>> >>> >>> >>> Cheers, >>> >>> Kamila >>> >>> >>> >>> >>> >>> The information in this e-mail is intended only for the person >>> to whom it is >>> >>> addressed. If you believe this e-mail was sent to you in error >>> and the e-mail >>> >>> contains patient information, please contact the Partners >>> Compliance HelpLine at >>> >>> http://www.partners.org/complianceline >>> <http://www.partners.org/complianceline> >>> <http://www.partners.org/complianceline >>> <http://www.partners.org/complianceline>> . If the e-mail was sent >>> to you in error >>> >>> but does not contain patient information, please contact the >>> sender and properly >>> >>> dispose of the e-mail. >>> >>> _______________________________________________ >>> >>> R-sig-phylo mailing list - R-sig-phylo@r-project.org >>> <mailto:R-sig-phylo@r-project.org> <mailto: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> >>> <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/> >>> <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 >>> <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/> >>> >>> >>> >>> >> >> _______________________________________________ >> 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/ _______________________________________________ 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/