【发布时间】:2020-08-11 14:48:53
【问题描述】:
几个月来,我一直在使用相同的 pheatmap 代码变体来制作热图,没有任何问题,但最近它不再能够对行进行聚类。列仍然像平常一样聚集,但每当我尝试添加行集群时,它都会给我关于数据中的 NA/NaN/Inf 的相同错误消息
我的所有数据集看起来都非常相似,主要只是行数发生了变化(在 40-2000+ 之间)。这是我目前正在使用的数据头,所有的 0 都已替换为 NA:
> head(protdata, 4)
PR1 PO1 WA1 PR2 PO2 WA2 PR3 PO3 WA3 PR4 PO4 WA4 PR5 PO5
[1,] 0.004420 NA 0.002370 0.00141 0.002890 0.003740 4.36e-03 0.005370 0.00143 0.002070 NA 0.00428 0.005220 NA
[2,] 0.000233 8.85e-06 0.000136 NA 0.000056 0.000713 5.98e-05 NA NA 0.000541 NA NA 0.006700 4.95e-05
[3,] 0.001220 1.79e-05 0.000447 0.00183 0.000136 NA 6.99e-04 0.000298 0.00267 0.001330 NA NA 0.000655 1.36e-04
[4,] 0.001170 6.84e-04 0.000282 0.00173 0.001620 0.000648 1.05e-03 0.003570 0.00101 0.001410 NA NA 0.002960 NA
WA5 PR6 PO6 WA6 PR7 PO7 WA7
[1,] 0.001030 0.00448 NA 1.53e-03 0.005220 0.005520 1.86e-03
[2,] 0.000139 0.00145 0.000484 8.88e-05 0.000118 0.000122 1.79e-05
[3,] 0.003680 0.00033 NA NA NA 0.000163 3.99e-03
[4,] 0.000393 0.00023 NA NA 0.000625 NA 7.15e-04
数据集中有很多0,但只要将它们转换为NA,聚类就一直有效。没有任何列或行是零方差。这是我用来制作热图的代码:
protdata <- as.matrix(input[,-1])
protdata[protdata == 0] <- NA
rownames <- input[,1]
annotation_row <- data.frame(rownames)
rownames(protdata) <- annotation_row$Gene
pheatmap(log10(protdata), scale="row", border_color=NA, na_col="white", breaks=seq(-2,2,.01),
color=colorRampPalette(rev(brewer.pal(n=7, name="RdYlBu")))(400))
这是我不断收到的错误消息:
Error in hclust(d, method = method) :
NA/NaN/Inf in foreign function call (arg 10)
我可以让情节出现的唯一方法是在上面包含cluster_rows=FALSE。我很困惑为什么它工作得很好,而现在却不行,据我所知,我输入数据的方式并没有改变任何东西。
任何帮助将不胜感激!
【问题讨论】:
-
两行之间一次不行,没有完整的观察结果
-
喜欢这个 pheatmap(matrix(c(NA,1,NA,2,3,NA),ncol=3))
-
@StupidWolf 我不明白?我已经将这个确切的代码与其他几个填充了 NA 的数据集一起使用,并且从未遇到过丢失数据的问题。我所有的行都有 >2 个 z 分数的样本,并且没有一个是零方差
-
你检查过我提供的例子吗?你可以看到计算距离是不可能的。检查 > 2 个样本等并不能保证这一点
-
@StupidWolf 是的,但是在示例中没有足够数量的值来计算距离,而在我的中不应该有很多吗?