ConsensusClusterPlus函数pFeature子采样报错问题求助
解决ConsensusClusterPlus中pFeature<1时的
the condition has length >1错误 问题代码与错误
运行以下R代码时触发错误:
pl.eset <- matrix(runif(50*30), nrow=50, ncol=30) ConsensusClusterPlus::ConsensusClusterPlus(pl.eset, pFeature = 0.50, reps = 500,distance = "euclidean", clusterAlg = "km",verbose = F)
其中pl.eset是50行30列的无NA数值矩阵,返回错误:
Error in if (is.na(sample_x$submat)) { : the condition has length > 1
仅当pFeature=1时无错误,说明问题与特征子采样逻辑相关。
原因分析
这个错误的核心原因是矩阵维度与函数预期不匹配:
ConsensusClusterPlus默认要求输入矩阵的行代表特征,列代表样本,而你的矩阵是行代表样本、列代表特征的结构。当设置pFeature=0.5时,函数会对行(你实际的样本)进行采样,这种错位会导致子采样后的矩阵结构异常,触发条件判断的长度错误。
另外,旧版本的ConsensusClusterPlus存在子采样逻辑的bug,也可能导致该错误。
解决方案
- 转置矩阵以匹配函数要求:将样本×特征的矩阵转置为特征×样本的结构,修改代码如下:
pl.eset <- matrix(runif(50*30), nrow=50, ncol=30) # 转置矩阵,行变为特征,列变为样本 pl.eset_t <- t(pl.eset) ConsensusClusterPlus::ConsensusClusterPlus(pl.eset_t, pFeature = 0.50, reps = 500,distance = "euclidean", clusterAlg = "km",verbose = F)
- 升级到最新版本的ConsensusClusterPlus:如果转置后仍有问题,执行以下命令更新包:
install.packages("ConsensusClusterPlus")
- 确认采样后的特征数≥1:确保
pFeature与特征总数的乘积至少为1,避免出现空的子采样特征集(你的场景中30×0.5=15,满足要求)。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

