2017-02-02 16 views
2

У меня есть dendrogram:Вырезать дендрограммы

set.seed(10) 
mat <- matrix(rnorm(20*10),nrow=20,ncol=10) 
dend <- as.dendrogram(hclust(dist(mat))) 

И учитывая глубину среза:

я хотел бы отрезать все ветви, которые находятся справа от этого среза.

depth.cutoff <- 4.75 

Я хотел бы отрезать все ветви справа от пунктирной линии:

plot(dend,horiz = TRUE) 
abline(v=depth.cutoff,col="red",lty=2) 

enter image description here

И в конечном итоге с этим dendrogram:

enter image description here

Ближайший я получил, был usin g apedrop.tip, но проблема в том, что мой depth.cutoff включает в себя все листья, как в этом примере, он возвращает NULL.

Может быть кто-нибудь знает, если и как я могу удалить элементы из nested list, который представляет мой dendrogram, если их depth ниже depth.cutoff?

В качестве альтернативы, возможно, я могу преобразовать dendrogram к data.frame, который также перечисляет depth каждого node (в том числе листьев, которые будут иметь depth = 0), удалить все строки с depth<depth.cutoff из этого data.frame, а затем преобразовать, что вернуться к dendrogram?

ответ

2

cut отрежет дерево на определенной высоте. Она возвращает список upper и lower частей

cut(dend, h = depth.cutoff)$upper 

# $upper 
# 'dendrogram' with 2 branches and 5 members total, at height 5.887262 
# 
# $lower 
# $lower[[1]] 
# 'dendrogram' with 2 branches and 6 members total, at height 4.515119 
# 
# $lower[[2]] 
# 'dendrogram' with 2 branches and 2 members total, at height 3.789259 
# 
# $lower[[3]] 
# 'dendrogram' with 2 branches and 5 members total, at height 3.837733 
# 
# $lower[[4]] 
# 'dendrogram' with 2 branches and 3 members total, at height 3.845031 
# 
# $lower[[5]] 
# 'dendrogram' with 2 branches and 4 members total, at height 4.298743 


plot(cut(dend, h = depth.cutoff)$upper, horiz = T) 

enter image description here

+0

спасибо @SymbolixAU. Вы знаете, есть ли способ, чтобы все ветви заканчивались на одной линии? Не в сюжете, а в объекте dend? – dan

2

, возможно, более прямой способ получения вашей картины просто установить пределы, которые вы хотите построить.

plot(dend, horiz = TRUE, xlim=c(6,4.75)) 

Cropped Dendrogram

+0

, конечно, более «удобный» способ, если все OP хочет сделать, это построить конкретный раздел. – SymbolixAU

 Смежные вопросы

  • Нет связанных вопросов^_^