热图和热图之间的执行时间差.2

时间:2017-12-12 19:06:17

标签: r heatmap execution-time

我试图想象出相当大的矩阵(即10000 x 100)。如果我认为我对对列或行执行的任何其他聚类不感兴趣(由于维度很高,这可能会有问题),这似乎是可行的。

我开始使用heatmap.2包中的增强型gplots。由于我想忽略聚类或重新排序,根据文档和Stack建议(例如heatmap.2 specify row order OR prevent reorder),我设置了适当的参数

heatmap.2(some_data, Rowv = FALSE, Colv = FALSE, dendrogram = "none", trace="none")

然而,事实证明,执行时间非常长,好像它是二次,具体取决于行数,实际情况就是如此。请参阅下图中的依赖关系。

另一方面,当我使用heatmap中的基本stats函数并抑制树形图时

heatmap(same_data, Rowv = NA, Colv = NA)

计算执行时间线性,绝对可以忽略不计。 以下是执行时间的比较。enter image description here

我用于生成上述图的数据的代码是

num.rows <- c(100, 500, 1000, 1500, 2000, 2500, 3000)

times.heatmap.2 <- sapply(num.rows, function(rown){
  m <- matrix(rnorm(rown*50), rown, 50)
  system.time(tmp <- gplots::heatmap.2(m, Rowv = FALSE, Colv = FALSE, dendrogram = "none", trace="none"))
})    

times.heatmap <- sapply(num.rows, function(rown){
  m <- matrix(rnorm(rown*50), rown, 50)
  system.time(tmp <- heatmap(m, Rowv = NA, Colv = NA))
})

最后,问题。

  • 有没有人知道为什么heatmap.2具有如此长的执行时间,并且可能是对数据大小的二次依赖,即使它应该忽略任何二次运算(例如聚类)?
  • 我应该使用哪些参数,或者我们应该深入研究功能的源代码来诊断问题?

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

install.packages("heatmap3")

num.rows <- c(100, 500, 1000, 1500, 2000, 2500, 3000)

times.heatmap.3 <- sapply(num.rows, function(rown){
  m <- matrix(rnorm(rown*50), rown, 50)
  system.time(tmp <- heatmap3(m, Rowv = FALSE, Colv = FALSE, dendrogram = "none", trace="none"))
})