R语言如何将外部生成的linkage matrix转hclust对象绘制树状图并剪枝
手动构造hclust对象实现外部linkage matrix的聚类分析
核心逻辑
R的hclust类不要求必须从dist等内置对象转换生成,只要构造的列表包含指定字段、格式符合要求,即可正常调用plot()、cutree()等所有聚类相关函数。
实现步骤
1. 读取输入数据
# 读取外部生成的linkage matrix,需保证数据顺序为[合并簇1编号, 合并簇2编号, 合并高度, 合并后簇大小] linkage_df <- read.csv("你的linkage matrix文件路径.csv", header = FALSE) # 计算原始样本数n,linkage matrix的行数固定为n-1 n_sample <- nrow(linkage_df) + 1
2. 转换合并矩阵格式
注意:大部分其他语言输出的linkage matrix采用0起始的编号规则,需要转换为Rhclust要求的编号规则:叶子节点用负整数表示,已完成的合并步用正整数表示
merge_matrix <- apply(linkage_df[, 1:2], 2, function(col_val) { # 小于样本总数的编号为叶子节点,否则为历史合并步 ifelse(col_val < n_sample, -(col_val + 1), col_val - n_sample + 1) })
3. 提取合并高度向量
height_vec <- linkage_df[, 3]
4. 设置样本标签
# 替换为你实际的样本标签,顺序需和聚类输入的原始样本顺序完全一致 sample_labels <- paste0("样本_", 1:n_sample)
5. 构造hclust对象
custom_hclust <- list( merge = merge_matrix, height = height_vec, labels = sample_labels, method = "自定义" # 可替换为你实际使用的聚类方法,比如ward.D、average、single等 ) class(custom_hclust) <- "hclust"
后续分析调用
构造完成后即可正常使用所有hclust相关功能:
# 绘制树状图 plot(as.dendrogram(custom_hclust)) # 按簇数剪枝,比如分为6个簇 cut_k <- cutree(custom_hclust, k = 6) # 按高度剪枝,比如在高度为3的位置剪枝 cut_h <- cutree(custom_hclust, h = 3)
注意事项
- 如果你的linkage matrix编号规则不是0起始,只需调整
merge_matrix的转换逻辑,保证符合R的编号规则即可正常使用 - 构造完成后可对比R内置hclust生成的对象结构,确认字段格式匹配即可避免后续调用报错
内容的提问来源于stack exchange,提问作者wiscoYogi
相关产品推荐
相关产品推荐

