来自我用创建的树状图
hc<-hclust(kk)
hcd<-as.dendrogram(hc)
我选了一个子分行
k=hcd[[2]][[2]][[2]][[2]][[2]][[2]][[2]][1]
当我只显示k时,这会给出:
> 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
例如,我如何访问"中点"属性或"标签"属性中的第二个?
(我希望我在这里使用正确的术语)
我试过之类的东西
k$midpoint
attr(k,"midpoint")
但两者都返回了"NULL"。
很抱歉出现第2个问题:如何在属性"中点"之后添加"标签"属性?
您的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
您可以像前面的回答一样手动更改参数。这样做的问题是,当你想多次手动操作时,手动操作效率很低。此外,虽然更改参数很容易,但这种更改可能不会反映在任何其他功能中,因为它们不会基于这种更改执行任何操作(必须对其进行编程)。
对于您的特定问题,通常取决于我们要查看的属性。对于"中点",请使用get_nodes_attr
函数,并带有dendrend包中的"中点"参数。
# 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
有关包装的更多详细信息,您可以查看其小插曲。