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/

Reply via email to