你的问题是你做的比较dist
比你想象的要多得多。您正在计算5000选择 2,而不是200选择 2 比较。也许这不是您想要的,但它正在代码中这样做。
正如@Roland 指出的那样,大部分时间都花在了dist
,这进一步清楚地表明这就是问题所在。这是我机器上的示例:
data <- replicate(1500, rnorm(200))
system.time(aheatmap(data, dist="correlation"))
user system elapsed
27.69 0.64 28.33
system.time(dist(1 - cor(data))) # A line that is in aheatmap
user system elapsed
21.26 0.02 21.28
该dist
函数是用 R 中的 C 函数实现的,因此您会期望它很快。
当你运行时cor(data)
,它会给你一个 5000x5000 的矩阵,(或者在我较小的测试用例中是 1500x1500),然后由dist
. 这意味着我的计算机正在计算
choose(1500,2) / 21
[1] 53535.71
大约每秒 53535.71 次比较,我认为这相当快。除非您减少进行比较的次数,否则您不会有太大的不同。
如果要停止计算 5000 列的聚类,可以传递NA
给Colv
参数,如?aheatmap
.
aheatmap(data,distfun="correlation",Rowv=NA) # No clustering on rows.
aheatmap(data,distfun="correlation",Colv=NA) # No clustering on columns.
值得注意的是,传递FALSE
仍然会计算树状图(慢速部分),但不会显示它,NA
甚至不会计算树状图。