1

从我创建的树状图

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:我如何在属性“中点”之后添加“标签”属性?

4

2 回答 2

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
于 2014-10-07T16:11:15.083 回答
0

您可以像上一个答案一样手动更改参数。这样做的问题是,当您想多次手动执行时,效率不高。此外,虽然更改参数很容易 - 该更改可能不会反映在任何其他功能中,因为它们不会基于该更改执行任何操作(必须编程)。

对于您的具体问题 - 它通常取决于我们要查看的属性。对于“midpoint”,使用get_nodes_attr带有“midpoint”参数的函数 - 来自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

有关包装的更多详细信息,您可以查看它的小插图

于 2015-01-31T09:41:46.420 回答