データのヒートマップを準備しようとしていますが、なぜこのエラーが表示されるのかわかりません。
私のデータ:
> 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)
私も上記のサンプルデータでエラーを再現できませんでしたが、再現したとき
_tbl_ready[1,1] <- Inf
_
もう一度実行すると、同じエラーが発生しました。これは、マトリックスに無限の値がある可能性が高いことを意味します。クリーニング後にsum(is.infinite(tbl_ready))
が0を返すことを確認しますか?
d3heatmap(tbl_ready,Rowv = FALSE, Colv=FALSE)
を試してください
行と列の自動並べ替えは私にも問題を引き起こしていました。それを無効にすると問題が修正されました
これは、テーブルのどこかに空白行があるために発生しています。
次のコードで同じエラーが解決されました
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")