How to access attributes of a dendrogram in R

落花浮王杯 提交于 2019-12-11 09:11:28

问题


From a dendrogram which i created with

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

i picked a subbranch

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

When i simply have k displayed, this gives:

> 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

How can i access, for example, the "midpoint" attribute, or the second of the "label" attributes?

(I hope i use the correct terminology here)

I have tried things like

k$midpoint
attr(k,"midpoint")

but both returned 'NULL'.

Sorry for question number 2: how could i add a "label" attribute after the attribute "midpoint"?


回答1:


Your k is still buried one layer too deep. The attributes have been set on the first element of the list k.

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

Alternatively, you can use attr:

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



回答2:


You can change parameters manually as in the previous answer. The problem with this is that it is not efficient to do manually when you want to do it many times. Also, while it is easy to change parameters - that change may not be reflected in any other function, since they won't implement any action based on that change (it must be programmed).

For your specific question - it generally depends on which attribute we want to view. For "midpoint", use the get_nodes_attr function, with the "midpoint" parameter - from the dendextend package.

# 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")

And you get this:

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

To also change an attribute, you can use the various assign functions from the package: 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

If all you want is to change the labels, the following ability from the package would solve your question:

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

For more details on the package, you can have a look at its vignette.



来源:https://stackoverflow.com/questions/26240200/how-to-access-attributes-of-a-dendrogram-in-r

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!