Martin Maechler schrieb: >>>>>>"Timo" == Timo Becker <[EMAIL PROTECTED]> >>>>>> on Tue, 28 Feb 2006 11:01:26 +0100 writes: >>>>>> >>>>>> > > Timo> Dear R users, I have created data for hierarchical > Timo> agglomerative cluster analysis which consist of the > Timo> merging pairs and the agglomeration heights, e.g. > Timo> something like > > Timo> my.merge <- matrix(c(-1,-2,-3,1), ncol=2, byrow=TRUE) > Timo> my.height <- c(0.5, 1) > > Timo> I'd like to plot a corresponding dendrogram but I > Timo> don't know how to convert my data to achieve this. Is > Timo> it possible to create a dendrogram object from a > Timo> cluster hierarchy? > >Yes, it is possible. R does it already with the >as.dendrogram() method for objects of class "hclust". > > Unfortunately the hierarchy is created by another program than R. This is the reason why the only available data for the hclust or dendrogram object creation are the merge-matrix and the agglomeration heights. So as.dendrogram() does not work here.
>But I assume you'd also like to know *how* you can do it... ;-) > >I'd strongly recommend to take the example of hclust() and have >your function return an object ``like'' the one hclust() >returns. Then, as.dendrogram( <your object> ) will work. > >You have to decide for yourself if your function should return >an object of class "hclust" (which is partly described by >?hclust ), and you use as.dendrogram[.hclust]() directly, >or rather your function returns a class "hclustTimo" and you >write your own as.dendrogram.hclustTimo() method. > >I'd recommend looking at and using the R's source code, e.g., from >https://svn.R-project.org/R/trunk/src/library/stats/R/hclust.R and >https://svn.R-project.org/R/trunk/src/library/stats/R/dendrogram.R > >Regards, >Martin Maechler, ETH Zurich > > > I adapted the source code of hclust.R and a quick (and VERY dirty) solution is as follows: hierarchy2dendrogram <- function(hierarchy) { tree <- list(merge = hierarchy[,1:2], height= hierarchy[,3], order = seq(1:(dim(hierarchy)[1]+1)), method=NULL, call = match.call(), dist.method = "whatever") class(tree) <- "hclust" return(tree) } my.merge <- matrix(c(-1,-2,-3,1), ncol=2, byrow=TRUE) my.height <- c(0.5, 1) my.hierarchy <- cbind(my.merge, my.height) my.hclust.object <- hierarchy2dendrogram(my.hierarchy) plot(my.hclust.object) Perhaps there exists a "cleaner" solution which also returns the optimal order (if I am right the ordering is accomplished by the Fortran function "hcass2") but the above works fine for me. Thanks a lot and best regards, Timo -- Timo Becker Phonetics Austrian Academy of Sciences Acoustics Research Institute ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
