【问题标题】:Heatmap function in R dendrogram failureR 树状图故障中的热图函数
【发布时间】:2011-10-06 12:57:34
【问题描述】:

对于我的一生,我无法理解为什么这种方法会失败,我真的很感激这里有一双额外的眼睛:

heatmap.2(TEST,trace="none",density="none",scale="row", 
     ColSideColors=c("red","blue")[data.test.factors],
     col=redgreen,labRow="", 
     hclustfun=function(x) hclust(x,method="complete"),
     distfun=function(x) as.dist((1 - cor(x))/2))  

我得到的错误是: 行树状图排序给出了错误长度的索引

如果我不包括 distfun,那么一切都会运行良好并且对 hclust 函数有响应。任何建议都将不胜感激。

【问题讨论】:

  • 如何通过提供一个小的示例数据集(可能是使用dput(head(test)) 的TEST 的前几行)来使这个示例可重现?
  • 几行不行,你可能需要(例如)test0 <- TEST[1:10,1:10]; dput(test0) 等等

标签: r heatmap dendrogram


【解决方案1】:

对dist的标准调用计算提供的矩阵的行之间的距离,cor计算提供的矩阵的列之间的相关性,所以上面的例子可以工作,你需要转置矩阵:

heatmap.2(TEST,trace="none",density="none",scale="row", 
     ColSideColors=c("red","blue")[data.test.factors],
     col=redgreen,labRow="", 
     hclustfun=function(x) hclust(x,method="complete"),
     distfun=function(x) as.dist((1 - cor(  t(x)  ))/2))

应该可以。如果您使用方阵,您将获得有效的代码,但它不会计算您认为的内容。

【讨论】:

  • 只需将 x 替换为 t(x) 即可!这个答案是这里唯一一个真正解决这个问题的答案。
【解决方案2】:

根据 Ben Bolker 的回复,如果 TEST 是 n×n 矩阵且 data.test.factors 是 n 个整数的向量,您的代码似乎可以工作。例如,以

开头
 n1 <- 5
 n2 <- 5
 n3 <- 5
 TEST <- matrix(runif(n1*n2), nrow=n1)
 data.test.factors <- sample(n3)

那么你的代码就可以工作了。但是,如果n1 和n2 不同,那么您将收到错误row dendrogram ordering gave index of wrong length,而如果它们相同但n3 不同或data.test.factors 具有非整数,那么您将收到错误'ColSideColors' must be a character vector of length ncol(x) .

【讨论】:

    【解决方案3】:

    这还不能重现...

     TEST <- matrix(runif(100),nrow=10)
      heatmap.2(TEST, trace="none", density="none", 
                scale="row",
                labRow="",
                hclust=function(x) hclust(x,method="complete"),
                distfun=function(x) as.dist((1-cor(x))/2))
    

    为我工作。我不知道redgreen 或data.test.factors 是什么。

    您是否尝试过debug(heatmap.2) 或options(error=recover)(或traceback(),虽然它本身不太可能有用)来尝试追踪错误的确切位置?

    > sessionInfo()
    R version 2.13.0 alpha (2011-03-18 r54865)
    Platform: i686-pc-linux-gnu (32-bit)
    ...
    other attached packages:
    [1] gplots_2.8.0   caTools_1.12   bitops_1.0-4.1 gdata_2.8.2    gtools_2.6.2  
    

    【讨论】:

    • 你的例子帮助我找出我的错误。这种方法需要一个方阵,我的初始矩阵不是方阵。如果我重新运行您在上面发布的代码示例,除了使用 TEST[,1:9],那么我会重现我最初遇到的错误。非常感谢!
    猜你喜欢
    • 2013-03-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 2017-12-07
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多