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 6is the "root" of the edge matrix for the tree (i.e., it has the nodenumber 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 unrootedtree at the "root" node (i.e., the node with node numberNtip(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, whileusing node7 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-phyloSearchable archive athttp://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/