添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
pheatmap: Error in hclust(d, method = method) : NA/NaN/Inf in foreign function call (arg 10)
`Gene descripti~ `Gene symbol` mu_p0 `mu_ p2_` <chr> <chr> <dbl> <dbl> 1 RIKEN cDNA 0610~ 0610005C13RIK 0.797 1.04 2 RIKEN cDNA 0610~ 0610007C21RIK 99.9 129. 3 RIKEN cDNA 0610~ 0610007L01RIK 28.4 32.7 4 RIKEN cDNA 0610~ 0610007P08RIK 6.13 2.61 5 RIKEN cDNA 0610~ 0610007P14RIK 37.9 37.7

and here my code:

library(gplots) 
library(pheatmap)
library(RColorBrewer)
library(tidyr)
mouse <- Mousebaseline %>% drop_na() #remove rows with NA from the merged filed
rnames <- mouse$`Gene symbol`#select name
mouse <- mouse[-c(1:2)]# remove gene symbol
mouse.matrix <-(as.matrix(mouse))
rownames(mouse.matrix) <- rnames # assign row names
mouse.matrix <- t(mouse.matrix) #transpose
mouseUT <- scale(mouse.matrix)
pheatmap(mouseUT, scale = "none",cluster_rows = T, cluster_cols = T, show_rownames = T, show_colnames = F, clustering_method = "ward.D2",border_color= NA, main = "Mouse baseline (Ward.D2)")

it gives me the same error even if I do not scale prior the heatmap like:

pheatmap(mouse.matrix, scale = "column",cluster_rows = T, cluster_cols = T, show_rownames = T, show_colnames = F, clustering_method = "ward.D2",border_color= NA, main = "Mouse baseline (Ward.D2)")

also if I do na.omit() as follow:

library(gplots) 
library(pheatmap)
library(RColorBrewer)
library(tidyr)
mouse <- Mousebaseline %>% drop_na() #remove rows with NA from the merged filed
rnames <- mouse$`Gene symbol`#select name
mouse <- mouse[-c(1:2)]# remove gene symbol
mouse.matrix <-(as.matrix(mouse))
rownames(mouse.matrix) <- rnames # assign row names
mouse.matrix <- t(mouse.matrix) #transpose
mouseUT <- scale(mouse.matrix)
mouseUT<- na.omit(mouseUT)
pheatmap(mouseUT, scale = "none",cluster_rows = T, cluster_cols = T, show_rownames = T, show_colnames = F, clustering_method = "ward.D2",border_color= NA, main = "Mouse baseline (Ward.D2)")

I got this error:

Error in hclust(d, method = method) : must have n >= 2 objects to cluster

thank you for you help!

camilla

Before running pheatmap() function, please do and post here the result of the two following lines of code:

is.na(mouseUT) %>% table()
dim(mouseUT)

António

thank you. is this means that there are NAs? if yes, why my code doesn't get rid of them?

is.na(mouseUT) %>% table()
 FALSE   TRUE 
168102  37566 
dim(mouseUT)
[1]     6 34278
                        

Yes, it means that you still have NAs in our data. This is quite strange, because I tried to exclude NAs with the functions that you have and it works with mine example.

Still I think pheatmap supports/deals with NAs; however, it does not handle infinite values. Did you transformed your current data using logaritm?

...but the output of this command indicates that your data has thousands of NA values:

is.na(mouseUT) %>% table()

pheatmap() cannot calculate distances using NA values if, for example, an entire gene or sample only has NA values; so, you will have to filter out genes and/or samples that only have NA values.

You will have to trace back through your code and check the contents of each object. The mere fact that there was a variable called Gene symbol in mouse and Mousebaseline is likely where you need to first look.

Indeed (I looked up further in this thread), you need to remove those first 2 columns from the data and ensure that all other columns are encoded numerically. drop_na() will only work on a data-frame (or matrix) that is only numerical.

I can basically reproduce the same error (in Portuguese) if I impute NAs row- and column-wise:

data.frame(A = c(1,2,3),B = c(5,4,3))
1 1 5
2 2 4
3 3 3
pheatmap(data.frame(A = c(1,2,3),B = c(5,4,3)))
data.frame(A = c(1,NA,3),B = c(5,NA,3))
1  1  5
2 NA NA
3  3  3
pheatmap(data.frame(A = c(1,NA,3),B = c(5,NA,3)))
Error in hclust(d, method = method) : 
  NA/NaN/Inf em chamada de função externa (argumento 10)
data.frame(A = c(1,2,3),B = c(NA,NA,NA))
1 1 NA
2 2 NA
3 3 NA
pheatmap(data.frame(A = c(1,2,3),B = c(NA,NA,NA)))
Error in hclust(d, method = method) : 
  NA/NaN/Inf em chamada de função externa (argumento 10)
                        

I have tried removing the character columns and it still did not work. but this morning I thought that maybe there were rows = 0 that once scaled give rise to NA and removing them with the following code, works:

mouse <-filter_if(Mousebaseline, is.numeric, all_vars((.) != 0)) #remove all rows with n= 0
rnames <- mouse$`Gene symbol`#select name
mouse <- mouse[-c(1:2)]# remove gene symbol
mouse.matrix <-(as.matrix(mouse))
rownames(mouse.matrix) <- rnames # assign row names
mouse.matrix <- t(mouse.matrix) #transpose
mouseUT <- scale(mouse.matrix)
                        

Yes, if one column contains only zeros, after scaling the whole column will be set to NaN.

So, may be this was the issue with your data since the begining.

António