【问题标题】:speed up heatmap and error in aheatmap (NMF package) when providing a hclust object提供 hclust 对象时加快热图和热图(NMF 包)中的错误
【发布时间】:2015-11-15 01:26:47
【问题描述】:

我试图加快我的热图创建速度,主要计划是使用 amap 包中的 hcluster 函数来并行化集群。

我阅读了aheatmap 文档,我可以提供一个hclust-object,并且我在堆栈溢出的某处阅读,层次聚类是主要瓶颈。所以我想只计算一次聚类并将其提供给我的热图。

现在我收到以下错误:

clust_mat 中的错误(mat,Rowv,distfun = distfun,hclustfun = hclustfun,: aheatmap - 无效的聚类函数:必须是字符串或函数

pg_h <- matrix(rnorm(10000),ncol = 10)

d <- dist(pg_h)
h <- hclust(d)
aheatmap(pg_h, 
         Colv=NA,
         scale='row',
         distfun=d, 
         hclustfun=h)

谁能帮我解决这个问题,或者有没有其他方法可以创建我的热图。我有大约 8000 行和 15 列,这需要一个多小时。我只想对行进行聚类。

【问题讨论】:

    标签: r


    【解决方案1】:

    至少对于错误,我相信在这种情况下您必须传递从您的hclust 类对象(h)获得的方法,如下所示:

    aheatmap(pg_h, 
         Colv=NA,
         scale='row',
         distfun=d, 
         hclustfun=h$method)
    

    以下:

    您可以在相关对象的str 中看到method

    > str(h)
    #List of 7
    #$ merge      : int [1:999, 1:2] -778 -321 -191 -549 -133 -176 -94 -514 -653 -359 ...
    #$ height     : num [1:999] 0.914 0.927 0.934 0.951 0.963 ...
    #$ order      : int [1:1000] 74 910 12 864 979 849 218 361 478 974 ...
    #$ labels     : NULL
    #$ method     : chr "complete"
    #$ call       : language hclust(d = d)
    #$ dist.method: chr "euclidean"
    #- attr(*, "class")= chr "hclust"
    

    至于问题的第一部分(加速,如果这是您所指的),通过hclust 对象传递方法确实 似乎可以更快地产生输出。以下是一些基准:

    system.time(aheatmap(pg_h, Colv=NA, scale='row', distfun=d, hclustfun=h$method))
    #   user  system elapsed 
    #   3.31    0.36    3.87 
    system.time(aheatmap(pg_h, Colv=NA, scale='row', distfun=d, hclustfun="complete"))
    #   user  system elapsed 
    #   3.51    0.65    4.35 
    

    请注意,hclustfun(“完成”)的方法在两种情况下都是相同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 2018-09-21
      • 2016-07-28
      • 2016-11-21
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多