R语言报错‘Error: number of cluster centres must lie between 1 and nrow(x)’求解
问题排查与解决
你遇到的Error: number of cluster centres must lie between 1 and nrow(x)报错,核心是聚类数的合法范围与数据集样本量不匹配,结合你的代码,具体问题和修复方案如下:
冗余代码清理:
你代码里的no_1.data <- dist(no_1.scale)完全多余,这行把原本的特征数据框覆盖成了距离矩阵,但后续并未使用,直接删除即可,避免代码混乱。核心错误原因:
fviz_nbclust默认会从k=2开始尝试聚类数,但如果你的no_1.scale数据集只有1条样本(即nrow(no_1.scale) == 1),kmeans要求聚类数k必须在1到1之间(因为样本数为1时无法分成多个簇),工具尝试的k≥2就会触发报错。修复步骤:
- 先确认样本量:在代码中添加
print(nrow(no_1.scale)),查看数据有多少条记录。如果样本量≤1,聚类本身没有意义,需要补充更多数据。 - 若样本量≥2仍报错,手动限定聚类数范围:
修改fviz_nbclust的调用,明确最大聚类数不超过样本数-1:fviz_nbclust(no_1.scale, kmeans, method = "wss", k.max = nrow(no_1.scale)-1) - 额外检查:用
str(no_1.scale)确认提取的no_1[2:3]是否为数值型列——如果是分类列,scale()处理后的数据无法用于kmeans聚类,需要更换特征列。
- 先确认样本量:在代码中添加
内容的提问来源于stack exchange,提问作者Akhtar Ruzain
相关产品推荐
相关产品推荐

