R层次聚类调用rect.dendrogram报$ operator is invalid for atomic vectors错如何解决
报错原因
$ operator is invalid for atomic vectors报错核心原因是你传入rect.dendrogram()的clust5不是该函数要求的dendrogram类对象,大概率是两种情况:
clust5是hclust()直接输出的聚类结果对象,不是转换后的dendrogram类型clust5是cutree()返回的簇分类原子向量,本身没有属性结构,不支持$运算符调用
解决方法
方案1:使用适配hclust对象的标注函数(无需转换,更简便)
如果你是直接用hclust()做的层次聚类,无需调用rect.dendrogram,直接用配套的rect.hclust()函数即可,完整流程示例:
# 示例层次聚类流程,替换为你自己的数据集即可 dist_mat <- dist(数据集, method = "euclidean") clust_hclust <- hclust(dist_mat, method = "ward.D2") # 绘制树状图 plot(clust_hclust, main = "层次聚类5簇划分") # 标注5个簇的矩形框 rect.hclust(clust_hclust, k = 5, border = "red")
方案2:转换为dendrogram类后使用原函数
如果确实需要使用rect.dendrogram(),先将hclust结果转换为dendrogram类型即可:
# 转换hclust对象为dendrogram类 clust_dend <- as.dendrogram(clust_hclust) # 绘制树状图 plot(clust_dend, main = "层次聚类5簇划分") # 调用rect.dendrogram标注 rect.dendrogram(clust_dend, k = 5, border = "red")
注意事项
如果你的clust5是cutree(clust_hclust, k=5)得到的簇分类向量,该对象仅保存每个样本的簇归属结果,无法用于树状图绘制,你需要保留最开始hclust()输出的聚类结果对象用于作图。
内容的提问来源于stack exchange,提问作者Paulina Schmidt
相关产品推荐
相关产品推荐

