Есть ли способ получить "поддерево" из hclust?(Р) - PullRequest
4 голосов
/ 13 июня 2010

Я хочу создать "поддерево" из объекта 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)

Спасибо за любую помощь,

Tal

Ответы [ 2 ]

6 голосов
/ 14 июня 2010

Не уверен, что это то, что вы ищете, но вы могли бы

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

par(mfrow=c(1,3))
plot(a)
plot(branch1)
plot(branch2)
0 голосов
/ 07 ноября 2016

Если у вас есть матрица расстояний, вы можете сделать что-то похожее на это:

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