如何将层次聚类cutree的randIndex结果存入向量?R语言求助
解决方案
首先确保你加载了包含randIndex函数的包(常用的是flexclust),如果还没安装先执行安装命令:
install.packages("flexclust") library(flexclust)
你的原代码仅完成了指数计算,但没有保存结果。下面是修改后的代码,能把所有调整兰德指数存入向量方便对比:
方法1:用for循环实现
# 初始化空向量,长度对应k=2到13的12个取值 rand_indices <- numeric(length(2:13)) # 给向量命名,后续能直接看到每个值对应的分组数k names(rand_indices) <- paste0("k=", 2:13) for(i in 2:13){ # 切割聚类树得到分组结果 cluster_groups <- cutree(hclust1, k=i) # 计算调整兰德指数并存入向量对应位置 rand_indices[as.character(i)] <- randIndex(stored_vector, cluster_groups) } # 查看最终结果 rand_indices
方法2:用sapply简化代码(更简洁)
R中可以用sapply替代for循环,一行代码完成计算:
rand_indices <- sapply(2:13, function(k) { cluster_groups <- cutree(hclust1, k=k) randIndex(stored_vector, cluster_groups) }) # 给结果命名,方便对应k值 names(rand_indices) <- paste0("k=", 2:13)
关键说明:
- 提前初始化向量是为了分配内存,比循环中用
c()不断追加结果更高效。 - 给向量命名后,你能直观看到每个指数对应的分组数,便于快速对比不同k值的聚类效果。
- 确保
stored_vector和cutree返回的分组结果是分类变量类型(整数或因子),randIndex才能正确计算调整兰德指数。
内容的提问来源于stack exchange,提问作者wantingtoimprove
相关产品推荐
相关产品推荐

