### Re: [R-sig-phylo] Rooting on a node with resolve.root = TRUE

Hi all, There is indeed a bug in root(), but there seems to be an ambiguity which needs to be solved: I think Luiz's command should give an error for the reason I try to explain below. As written in the help page, the option 'node' is an alternative to 'outgroup': node: alternatively, a node number where to root the tree (this should give the MRCA of the ingroup). If the tree is unrooted, then at least 3 clades are connected to a node (reminder: the tree is eventually unrooted before being re-rooted) and thus there are several ways to define the in- and outgroups (this is clear when plotting the tree with type = u). In practice, this is not a problem since the action of root() is, by default, to rearrange the edges in order to move 'node' at the base of the tree when plotted by default. If resolve.root = TRUE, then the in- and outgroups must be identified more clearly: If ‘resolve.root = TRUE’, ‘root’ adds a zero-length branch below the MRCA of the ingroup. So when the tree is plotted, the ingroup and the outgroup are effectively sister-clades. If 'node' is not the current root of the tree, the ambiguity is solved arbitrarily by considering the clade on the right of 'node' (when the tree is plotted by default) as the ingroup. So these (using Luiz's tree) work: root(t5, node = 7, resolve.root = TRUE) root(t5, node = 8, resolve.root = TRUE) Thus, I propose the following changes: 1) root(phy, node = Ntip(phy) + 1, resolve.root = TRUE) should return an explicit error. 2) The other cases of root(phy, node = ..., resolve.root = TRUE) may still be allowed and the help page should be explicit about this. I'm not certain about 2): to be consistent this should also return an error, but maybe some users use this kind of commands (though I don't think this is very common). All comments welcome! Best, Emmanuel Thu, 19 Mar 2015 15:37:47 -0400 Liam J. Revell liam.rev...@umb.edu: Maybe this is obvious, but even though your tree is unrooted, node 6 is the root of the edge matrix for the tree (i.e., it has the node number equal to Ntip(tree)+1) - thus: t5-multi2di(t5) will give you a resolved tree rooted at this node. There seems to be a bug in root when you try to root an unrooted tree at the root node (i.e., the node with node number Ntip(tree)+1). All the best, Liam Liam J. Revell, Assistant 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 3/19/2015 3:12 PM, Luiz Max Carvalho wrote: Dear phylofolks, I'm trying to root a tree on an internal (rather than a terminal) branch. Here is a small example: library(ape) t5 - rmtree(N = 1, n = 5, rooted = FALSE)[[1]] root(t5, node = 6, resolve.root = TRUE) output: Error in if (i != N) { : argument is of length zero root(t5, node = 7, resolve.root = TRUE) output: Phylogenetic tree with 5 tips and 4 internal nodes. Tip labels: [1] t4 t3 t2 t5 t1 Rooted; includes branch lengths. I don't understand why rooting at node 6 throws an error, while using node 7 is fine. What am I missing? Cheers, Luiz ___ 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/

### Re: [R-sig-phylo] Rooting on a node with resolve.root = TRUE

Maybe this is obvious, but even though your tree is unrooted, node 6 is the root of the edge matrix for the tree (i.e., it has the node number equal to Ntip(tree)+1) - thus: t5-multi2di(t5) will give you a resolved tree rooted at this node. There seems to be a bug in root when you try to root an unrooted tree at the root node (i.e., the node with node number Ntip(tree)+1). All the best, Liam Liam J. Revell, Assistant 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 3/19/2015 3:12 PM, Luiz Max Carvalho wrote: Dear phylofolks, I'm trying to root a tree on an internal (rather than a terminal) branch. Here is a small example: library(ape) t5 - rmtree(N = 1, n = 5, rooted = FALSE)[[1]] root(t5, node = 6, resolve.root = TRUE) output: Error in if (i != N) { : argument is of length zero root(t5, node = 7, resolve.root = TRUE) output: Phylogenetic tree with 5 tips and 4 internal nodes. Tip labels: [1] t4 t3 t2 t5 t1 Rooted; includes branch lengths. I don't understand why rooting at node 6 throws an error, while using node 7 is fine. What am I missing? Cheers, Luiz ___ 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/