使用diceR包结合K-means+GMM做共识聚类遇内存错误求解决
问题:diceR包共识聚类内存溢出(结合K-means与GMM,k=4)
- 数据规模:231个细胞样本(分属4种肿瘤类型),共19177个基因变量
- 分析需求:固定聚类数k=4,结合K-means(
km)和高斯混合模型(gmm)生成共识聚类 - 运行代码:
cc <- consensus_cluster(data, nk = 4, algorithms =c("gmm", "km"), progress = F )
- 报错信息:
Error: cannot allocate vector of size 11.0 Gb
可行解决方法
1. 先对高维基因数据降维
19177个基因的高维数据是内存过载的核心原因,先通过PCA降维到低维(保留足够解释方差)再聚类:
# PCA降维(保留累计方差贡献≥80%的主成分) pca_result <- prcomp(data, scale. = TRUE) cum_var <- cumsum(pca_result$sdev^2 / sum(pca_result$sdev^2)) n_pcs <- which(cum_var >= 0.8)[1] data_pca <- pca_result$x[, 1:n_pcs] # 使用降维后的数据运行共识聚类 cc <- consensus_cluster(data_pca, nk = 4, algorithms = c("gmm", "km"), progress = F)
2. 调整diceR参数减少内存消耗
通过减少重采样次数、降低采样比例来降低共识矩阵的计算量:
cc <- consensus_cluster(data, nk = 4, algorithms = c("gmm", "km"), nrep = 50, # 降低重采样次数(默认100) p = 0.6, # 降低每次采样的样本比例(默认0.8) progress = F)
如果不需要共识矩阵本身,可添加consensus = FALSE进一步节省内存。
3. 分算法独立生成聚类结果再手动合并共识
若上述方法仍内存不足,可拆分步骤:
- 分别对K-means和GMM进行多次重采样聚类,记录每个样本对的共聚类频次
- 将两个算法的共聚类矩阵按权重合并(比如各占50%)
- 最后对合并后的矩阵做聚类得到最终共识结果
4. 优化运行环境
- 确保使用64位R环境(32位R内存上限仅约4GB)
- 服务器环境可申请更多内存资源,本地环境可关闭其他占用内存的程序
内容的提问来源于stack exchange,提问作者Pom
相关产品推荐
相关产品推荐

