无论如何我都不能理解为什么这个方法失败了,我真的很感激这里有额外的眼睛:
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函数有响应。如有任何建议,我将不胜感激。
对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))
应该工作。如果你使用一个方阵,你会得到有效的代码,但它不会像你想象的那样计算。
这还不能复制…
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
基于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)
。