有没有办法从hclust获得“子树”? (R)

时间:2010-06-13 17:47:40

标签: r cluster-analysis

我希望从一个hclust对象创建一个“子树”。

例如,假设我有以下对象:

a <- list()  # initialize empty object
a$merge <- matrix(c(-1, -2,
                    -3, -4,
                     1,  2,
             -5,-6,
             3,4), nc=2, byrow=TRUE ) 
a$height <- c(1, 1.5, 3,4,4.5)    # define merge heights
a$order <- 1:6              # order of leaves(trivial if hand-entered)
a$labels <- 1:6# LETTERS[1:4]    # labels of leaves
class(a) <- "hclust"        # make it an hclust object
plot(a)                     # look at the result   

现在我希望从中提取以下子树:

a <- list()  # initialize empty object
a$merge <- matrix(c(-1, -2,
                    -3, -4,
                     1,  2
                ), nc=2, byrow=TRUE ) 
a$height <- c(1, 1.5, 3)    # define merge heights
a$order <- 1:4             # order of leaves(trivial if hand-entered)
a$labels <- 1:4# LETTERS[1:4]    # labels of leaves
class(a) <- "hclust"        # make it an hclust object
plot(a)                     # look at the result   

我怎么能访问它?

(我知道cutree可以让我得到子树的对象,但不能创建一个真正的hclust对象)

感谢您的帮助,

塔尔

2 个答案:

答案 0 :(得分:6)

不确定这是你想要的,但你可以

a <- as.dendrogram(a)
branch1 <- a[[1]]
branch2 <- a[[2]]

par(mfrow=c(1,3))
plot(a)
plot(branch1)
plot(branch2)

答案 1 :(得分:0)

如果你有距离矩阵,那么你可能会做类似的事情:

subtree <- function(d, idx) {
  hclust(dist(d[idx, idx]))
}
d <- matrix(rnorm(50 * 50), 50)
s <- subtree(d, sample(1:50, 20))
plot(s)