Функция тепловой карты при сбое R-дендрограммы - PullRequest
1 голос
/ 16 июля 2011

За всю свою жизнь я не могу понять, почему этот метод не работает, я был бы очень признателен за дополнительный набор глаз здесь:

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 ]

2 голосов
/ 12 марта 2013

Стандартный вызов 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 голосов
/ 16 июля 2011

Это пока не воспроизводится ...

 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 голос
/ 16 июля 2011

Опираясь на ответ Бена Болкера, ваш код работает, если 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...