【问题标题】:Error while creating heatmaps - NA/NaN/Inf in foreign function call (arg 11)创建热图时出错 - 外部函数调用中的 NA/NaN/Inf (arg 11)
【发布时间】:2014-07-07 11:33:18
【问题描述】:

我正在尝试为我的数据准备热图,但我不知道为什么会出现此错误。

我的数据:

> dput(head(tbl_ready))
structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.370330677123077, 
0, 0, 0, 0, 0, 0.53318856142826, 0, 0, 0, 0, 0, 0.217669675587482, 
0, 0, 0, 0.79337589572453, 0, 1, 0.0132525790616207, 0, 0, 1, 
0.498415470211292, 0.216961707575178, 0.0646831352678839, 0, 
0, 0, 0.778625047514492, 0.165974546372072, 0.076951015613392, 
0.889894091237216, 0, 0, 1, 0.129806153151281, 0.197647497443337, 
1, 0, 0, 0.509023013860118, 0.159412145987791, 0.207873742711735, 
0.749031133231353, 0.222918051830986, 0, 0.741479370384933, 0.133323148299248, 
0.216599753666685, 0.962652293738836, 0.303065152126049, 0, 0.801394522615822, 
0, 0.15864534869139, 0, 0.193050421324826, 0, 0.799048954936309, 
0, 0.328823938175914, 1, 0.425065664971905, 0, 0.578904125773447, 
0, 0.186228586828205, 0, 0.428641900764779, 0, 0.276948678897629, 
0, 0.117434041208573, 0, 0.272644463294893, 0, 0.138614907082177, 
0, 0.180927300758764, 0, 0.435388112571728, 0, 0, 0, 0.475087644525129, 
0, 0.762104865898499, 0, 0, 0, 0.227200985463951, 0, 0.418218667506089, 
0, 0, 0, 0.478763051110549, 0, 0.875837464800909, 0, 0, 0, 0.188429982762364, 
0, 0.418218667506089, 0, 0, 0, 0.349226871785504, 0, 0.998103388096146, 
0, 0, 0, 0.444963481341964, 0, 1, 0, 0, 0, 0.0670152075162316, 
0, 0, 0, 0, 0, 1, 0, 0, 0), .Dim = c(6L, 24L), .Dimnames = list(
    NULL, c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", 
    "X10", "X11", "X12", "X13", "X14", "X15", "X16", "X17", "X18", 
    "X19", "X20", "X21", "X22", "X23", "X24")))

我用来创建热图的代码(它适用于其他数据):

## For all of the genes
tbl_ready <- as.matrix(tbl_for[,2:25])
mode(tbl_ready)<-"numeric"

library(gplots)
heatmap.2(tbl_ready,
          Colv = NA,
          scale = "none",
          dendrogram = "row",
          col=rainbow(256, s = 1, v = 1, start = 0, end = 2/6, alpha = 1),
          density.info = "none",
          trace = "none",
          key = FALSE,
          cexCol=0.5,
          cexRow=1)

mtext(paste("ATh",""), side=3, line=-1, cex=1.5, col="black") 
mtext("Size in kDa", side=1, line=3.5, cex=1.3, col="black")  

我什至尝试将 Na/NaN/Inf 替换为 0 以避免出现问题:

## Replacing Na by 0
is.na(tbl_ready) <- sapply(tbl_ready, is.infinite)
tbl_ready[is.na(tbl_ready)] <- 0
tbl_ready[is.nan(tbl_ready)] <- 0

但错误仍然出现:

Error in hclustfun(distfun(x)) : 
  NA/NaN/Inf in foreign function call (arg 11)

【问题讨论】:

  • 我无法使用您发布的示例数据集重现错误(热图绘制得很好)。其余的数据是什么样的?有什么异常吗?
  • 我没有关注。您的数据中没有NA 值,也没有InfNaNheatmap (base R) 在原始 tbl_ready 矩阵中对我来说工作得很好。

标签: r nan na gplots


【解决方案1】:

我也无法使用上面提供的示例数据重现错误,但是当我这样做时

tbl_ready[1,1] <- Inf

然后再次运行它,我得到了同样的错误。这意味着矩阵中可能存在无限值。你确定sum(is.infinite(tbl_ready))在你清理后返回0?

【讨论】:

    【解决方案2】:

    试试d3heatmap(tbl_ready,Rowv = FALSE, Colv=FALSE)

    行和列的自动重新排序也给我带来了问题,禁用它可以解决问题

    【讨论】:

      【解决方案3】:

      发生这种情况是因为您在表格的某处有一个空行。

      【讨论】:

        【解决方案4】:

        以下代码解决了同样的错误

          docs <- dist( as.matrix(dtm), method = "euclidean")
          hclust_dist<- as.dist(docs)
          hclust_dist[is.na(hclust_dist)] <- 0
          hclust_dist[is.nan(hclust_dist)] <- 0
          sum(is.infinite(hclust_dist))  # THIS SHOULD BE 0
          h <- hclust(hclust_dist, "ward.D2")
        

        【讨论】:

          【解决方案5】:

          从矩阵中删除方差为零的行。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-09-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-27
            • 2019-04-04
            • 1970-01-01
            相关资源
            最近更新 更多