对于我的生活,我无法理解为什么这种方法失败了,我真的很感激这里有一双眼睛:
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功能。任何建议都会有很大的意义。
答案 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))
适合我。我不知道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
答案 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)
那么你的代码就可以了。但是,如果n1
和n2
不同,那么您将收到错误row dendrogram ordering gave index of wrong length
,如果它们相同,但n3
不同或data.test.factors
为非然后你会得到错误'ColSideColors' must be a character vector of length ncol(x)
。