以下函数返回一个我无法解决的错误。
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是一个50x30的矩阵,有数值,没有任何NAs。
运行这段代码时,返回如下错误:
Error in if (is.na(sample_x$submat)) { : the condition has length > 1
错误与pFeature的子采样有关。当 pFeature = 1 时,错误不会出现。
我在这里遗漏了什么吗?
你可能已经找到了答案,但我也有这个问题,除了你的问题找不到任何东西。
问题是函数 ccRun 中的这一行,它在 ConsensusClusterPlus() 中被调用:
if ( is.na( sample_x$submat ) ) {
stop( "error submat is NA" )
}
只有在以下情况下才会运行:
提供数据矩阵,不是距离矩阵
设置
method='km'
给pFeature一个值,这个值不是1
或设置
pFeature=1
并给weightsFeature一个值
所以如果
pFeature=1
并且您不举重,这不是问题。
sample_x$submat
是您为给定迭代生成的聚类提供的数据的子集。因此 is.na(sample_x$submat)
返回一个布尔矩阵而不是单个值,因此错误消息 'condition has length > 1'
我认为这是为了在
sample_x$submat = NA
内的任何值时停止运行,但是无论 sample_x$submat 中的值是什么,它都会停止整个过程。
我通过从这里复制源代码来修复它:https://rdrr.io/bioc/ConsensusClusterPlus/src/R/ConsensusClusterPlus.R
然后将有问题的 if 语句(第 410 行)替换为:
if ( sum(is.na( sample_x$submat ))>0 ) {
stop( "error submat is NA" )
}
并获取此脚本而不是加载 ConsensusClusterPlus 包。
希望这有帮助!