ConsensusClusterPlus 函数和 pFeature 参数的子采样出错

问题描述 投票:0回答:1

以下函数返回一个我无法解决的错误。

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 时,错误不会出现。

我在这里遗漏了什么吗?

r cluster-analysis k-means
1个回答
0
投票

你可能已经找到了答案,但我也有这个问题,除了你的问题找不到任何东西。

问题是函数 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 包。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.