Ben*_*ker 13
我相信热图至少需要很长时间,因为heatmap很多花哨的东西需要额外的时间和记忆.使用dat来自@ bill_080的示例:
## basic command: 66 seconds
t0 <- system.time(heatmap(dat))
## don't reorder rows & columns: 43 seconds
t1 <- system.time(heatmap(dat,Rowv=NA))
## remove most fancy stuff (from ?heatmap): 14 seconds
t2 <- system.time( heatmap(dat, Rowv = NA, Colv = NA, scale="column",
main = "heatmap(*, NA, NA) ~= image(t(x))"))
## image only: 13 seconds
t3 <- system.time(image(dat))
## image using raster capability in R 2.13.0: 1.2 seconds
t4 <- system.time(image(dat,useRaster=TRUE))
Run Code Online (Sandbox Code Playgroud)
您可能想要考虑热像图中您真正想要的东西 - 即,您是否需要花式树形图/重新排序的东西?
Ric*_*ton 11
关于R内存管理的SO问题有建议.如果您无法分配1000 x 1000图像,那么您可能应该停止尝试在手机上执行统计信息.
我尝试时没有错误.这是代码:
library(lattice)
#Build the data
nrowcol <- 1000
dat <- matrix(ifelse(runif(nrowcol*nrowcol) > 0.5, 1, 0), nrow=nrowcol)
#Build the palette and plot it
pal <- colorRampPalette(c("red", "yellow"), space = "rgb")
levelplot(dat, main="1000 X 1000 Levelplot", xlab="", ylab="", col.regions=pal(4), cuts=3, at=seq(0,1,0.5))
Run Code Online (Sandbox Code Playgroud)

使用heatmap3,它比默认heatmap函数具有更高的内存效率,并且通过使用fastcluster包进行分层聚类对我来说效果更好。添加参数useRaster=TRUE也有帮助:
library(heatmap3)
nrowcol <- 1000
dat <- matrix(ifelse(runif(nrowcol*nrowcol) > 0.5, 1, 0), nrow=nrowcol)
heatmap3(dat,useRaster=TRUE)
Run Code Online (Sandbox Code Playgroud)
useRaster=TRUE将内存使用控制在限制范围内似乎非常重要。您可以在 中使用相同的参数heatmap.2。计算层次聚类的距离矩阵是计算中的主要开销,但对于大型矩阵,heatmap3使用更有效的包。对于非常大的矩阵,尽管尝试进行基于距离的层次聚类,您将不可避免地遇到麻烦。在这种情况下,您仍然可以使用参数并抑制行和列树状图,并使用其他一些逻辑对行和列进行排序,例如fastclusterRowv=NAColv=NA
nrowcol <- 5000
dat <- matrix(ifelse(runif(nrowcol*nrowcol) > 0.5, 1, 0), nrow=nrowcol)
heatmap3(dat,useRaster=TRUE,Rowv=NA,Colv=NA)
Run Code Online (Sandbox Code Playgroud)
在我的 8 Gb 内存笔记本电脑上仍然可以毫无问题地运行,而包含树状图后,它已经开始崩溃了。