2014-10-07 14 views
1

Из дендрограммы, который я создал сКак получить доступ к атрибутам дендрограммы в R

hc<-hclust(kk) 
hcd<-as.dendrogram(hc) 

я выбрал суботраслевой

k=hcd[[2]][[2]][[2]][[2]][[2]][[2]][[2]][1] 

Когда я просто отобразили к, это дает:

> k 
[[1]] 
[[1]][[1]] 
[1] 243 
attr(,"label") 
[1] "NAfrica_002" 
attr(,"members") 
[1] 1 
attr(,"height") 
[1] 0 
attr(,"leaf") 
[1] TRUE 

[[1]][[2]] 
[1] 257 
attr(,"label") 
[1] "NAfrica_016" 
attr(,"members") 
[1] 1 
attr(,"height") 
[1] 0 
attr(,"leaf") 
[1] TRUE 

attr(,"members") 
[1] 2 
attr(,"midpoint") 
[1] 0.5 
attr(,"height") 
[1] 37 

Как получить доступ, например, к атрибуту «средняя точка» или ко второму атрибуту «label»?

(я надеюсь, что я использую правильную терминологию здесь)

Я пытался что-то вроде

k$midpoint 
attr(k,"midpoint") 

но оба вернулись 'NULL'.

Извините за вопрос №2: как я могу добавить атрибут «label» после атрибута «midpoint»?

+1

Если вы использовали 'k = hcd [[2]] [[2]] [[2]] [[2]] [[2]] [[2]] [[2]] [[1] ] ', вы получили бы просто содержимое, а не добавили их в список. –

ответ

1

Ваш k все еще похож на один слой слишком глубоко. Атрибуты были установлены в первом элементе списка k.

attributes(k[[1]]) # Display attributes 
attributes(k[[1]])$label # Access attributes 
attributes(k[[1]])$label <- 'new' # Change attribute 

В качестве альтернативы, вы можете использовать attr:

attr(k[[1]],'label') # Display attribute 
0

Вы можете изменить параметры вручную, как и в предыдущем ответе. Проблема заключается в том, что неэффективно делать это вручную, когда вы хотите делать это много раз. Кроме того, хотя легко изменить параметры - это изменение не может быть отражено ни в какой другой функции, так как они не будут реализовывать какое-либо действие на основе этого изменения (оно должно быть запрограммировано).

Для вашего конкретного вопроса - обычно это зависит от того, какой атрибут мы хотим просмотреть. Для «средней точки» используйте функцию get_nodes_attr с параметром «средняя точка» - из пакета dendextend.

# install.packages("dendextend") 
library(dendextend) 

dend <- as.dendrogram(hclust(dist(USArrests[1:5,]))) 
# Like: 
# dend <- USArrests[1:5,] %>% dist %>% hclust %>% as.dendrogram 

# midpoint for all nodes 
get_nodes_attr(dend, "midpoint") 

И вы получите это:

[1] 1.25 NA 1.50 0.50 NA NA 0.50 NA NA 

Чтобы также изменить атрибут, вы можете использовать различные присвоению функции из пакета: assign_values_to_leaves_nodePar, assign_values_to_leaves_edgePar, assign_values_to_nodes_nodePar, assign_values_to_branches_edgePar, remove_branches_edgePar, remove_nodes_nodePar

Если вы хотите только изменить этикетки, ваша задача будет решена из следующей возможности:

> labels(dend) 
[1] "Arkansas" "Arizona" "California" "Alabama" "Alaska"  
> labels(dend) <- 1:5 
> labels(dend) 
[1] 1 2 3 4 5 

Для получения дополнительной информации о пакете вы можете посмотреть at its vignette.