R树形图失效时的热图功能

时间:2011-07-15 22:54:46

标签: r heatmap dendrogram

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

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功能。任何建议都会有很大的意义。

3 个答案:

答案 0 :(得分:2)

这是不可复制的......

 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))

适合我。我不知道redgreendata.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  

答案 1 :(得分:2)

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))

应该有效。如果你使用方形矩阵,你将获得有效的代码,但它不会计算你认为它是什么。

答案 2 :(得分:1)

根据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)

那么你的代码就可以了。但是,如果n1n2不同,那么您将收到错误row dendrogram ordering gave index of wrong length,如果它们相同,但n3不同或data.test.factors为非然后你会得到错误'ColSideColors' must be a character vector of length ncol(x)