5

How can I convert a tree (which is the output of my Java program) to a dendrogram in R?

Currently, I am converting the tree into the Newick format, using the suggestion given here. And then I use the ape package in R to read the Newick-formatted tree:

library("ape")
cPhylo <- read.tree(file = "gc.tree")

Finally I use as.hclust in R to convert the tree into a dendrogram:

dendrogram <- as.hclust(gcPhylo)

However, the dendrogram requires the branch lengths. Although I insert the branch lengths, I am getting an error saying that the tree is not ultrametric:

Error in as.hclust.phylo(gcPhylo) : the tree is not ultrametric

I guess I am doing something wrong while inserting the branch lengths.

Is there any other way that I can follow? Or how can I insert the branch lengths while converting the tree into the Newick format? Equal branch lengths would be fine.

Community
  • 1
  • 1
Burcu
  • 375
  • 2
  • 5
  • 9
  • See the help for `?as.hclust` - this can only convert an object from class `twins` to `hclust`. Thus your code will definitely not work. As to how to make it work, I'm sorry but I haven't a clue. – Andrie Sep 16 '11 at 14:16
  • Then, it means there is nothing to do with the branch lengths. So it is not possible to convert it using as.hclust.. Then I need to find another way. – Burcu Sep 16 '11 at 14:27

3 Answers3

7

This is an old question, but it has inadequate answers so far. Since I had the same problem, and my googlefoo was having problems finding the answer, here you go:

library("ape")
cPhylo <- read.tree(file = "gc.tree")
dendrogram <- chronos(cPhylo)
Sandain
  • 79
  • 1
  • 2
6

This is an old question, but all of the previous answers require the tree to be made ultrametric before being converted to a dendrogram object.

You can use the DECIPHER package to read a dendrogram object from a Newick formatted file:

dend <- ReadDendrogram(path_to_newick_file)
Erik Wright
  • 135
  • 1
  • 5
2

I think the problem is in fact that your "gc.tree" isn't ultrametric. Make sure that the distance from the root to each tip is the same. The following code works:

library('ape')
tree <- read.tree(text='(((A:4.2,B:4.2):3.1,C:7.3):6.3,D:13.6);')
is.ultrametric(tree)
is.binary.tree(tree)
is.rooted(tree)
hc <- as.hclust.phylo(tree)

but make the tree non-ultrametric (note D's branch length):

tree <- read.tree(text='(((A:4.2,B:4.2):3.1,C:7.3):6.3,D:15);')

and as.hclust.phylo will raise an error.

user116293
  • 5,534
  • 4
  • 25
  • 17