This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Error when running pheatmap

Hi there,

I would like to do a heat map by using pheatmap. The problem is that when I tried to run it (with a very basic command) I get this error message:

head(dataset)
# A tibble: 6 x 11
 ID                         s21      s22     s23      s24       s25     s31     s32     s33    s34    s35
 <chr>                    <dbl>    <dbl>   <dbl>    <dbl>     <dbl>   <dbl>   <dbl>   <dbl>  <dbl>  <dbl>
1 TRINITY_DN31277_c0_…    7.80    2.65e+0  2.12e0  1.93e+0   6.35e+0  0.0258 0.00541 0.00004 0.0132 0.0182
2 TRINITY_DN38059_c1_… 2671.      1.13e+4  1.62e4  1.64e+4   3.13e+4 19.0    4.38    1.61    3.07   7.69  
3 TRINITY_DN29156_c0_…    0.960   2.56e+0  2.81e0  2.56e+0   6.93e+0  0.156  0.180   0.0934  0.156  0.0568
4 TRINITY_DN36493_c2_…    0.468   1.10e+0  1.75e0  1.70e+0   4.36e+0  0.0587 0.0907  0.0523  0.0483 0.0928
5 TRINITY_DN22456_c0_…    0.428   1.17e+0  1.71e0  1.42e+0   4.26e+0  0.0862 0.149   0.0845  0.0904 0.0545
6 TRINITY_DN24468_c0_…    0.0965  1.93e-1  0.      1.23e-1   8.12e-2  0      0       0       0      0     

pheatmap(as.matrix(dataset))
Error in hclust(d, method = method) : 
 NA/NaN/Inf in foreign function call (arg 11)
In addition: Warning messages:
1: In dist(mat, method = distance) : NAs introduced by coercion
2: In dist(mat, method = distance) : NAs introduced by coercion

I have been reading and apparently is a problem with removing the zero variance columns in my matrix. but I don't know how to do it.

Any help will be appreciate!

pheatmap error in hclust

There are some strange entries like 0. and 2671. Can you confirm this is indeed in your data or is this a copy/paste error when you made the post?

I have also imported the data by using a .txt file by:

data <- read.table("Genes_with_function.txt", header = TRUE, sep = "\t", dec = ".")

and then if I do:

head(data)
                  ID          s21          s22          s23          s24          s25         s31         s32     s33       s34        s35
1    TRINITY_DN31277_c0_g1_i1 7.795158e+00 2.647286e+00     2.115808 1.933543e+00 6.350756e+00  0.02582418 0.005407407 0.00004 0.0132500 0.01820809
2    TRINITY_DN38059_c1_g1_i1 2.670699e+03 1.131360e+04 16209.190000 1.642066e+04 3.127527e+04 18.96368000 4.375704000 1.61464 3.0683130 7.69485500
3    TRINITY_DN29156_c0_g1_i1 9.597895e-01 2.562030e+00     2.810692 2.559634e+00 6.926222e+00  0.15565930 0.180370400 0.09336 0.1556250 0.05676301
4    TRINITY_DN36493_c2_g1_i1 4.683158e-01 1.099098e+00     1.746231 1.704085e+00 4.361867e+00  0.05868132 0.090740740 0.05228 0.0483125 0.09277457
5    TRINITY_DN22456_c0_g1_i1 4.275263e-01 1.168571e+00     1.711769 1.419817e+00 4.256356e+00  0.08620879 0.149481500 0.08448 0.0904375 0.05450867
6 TRINITY_DN24468_c0_g1_i7.p2 9.647368e-02 1.931579e-01     0.000000 1.231707e-01 8.124444e-02  0.00000000 0.000000000 0.00000 0.0000000 0.00000000

But it didn't solve the problem:

pheatmap(as.matrix(data))
Error in hclust(d, method = method) : 
 NA/NaN/Inf in foreign function call (arg 11)
In addition: Warning messages:
1: In dist(mat, method = distance) : NAs introduced by coercion
2: In dist(mat, method = distance) : NAs introduced by coercion

Well, you obviously cannot cluster the first column, ID; so, you will have to set that as the rownames and then remove that column from the object before you convert it to a data matrix.

Thank you Kevin.

I have tried to do what you have said:

tbl_ready <- as.matrix(data[,2:11])
mode(tbl_ready)<-"numeric"

I have checked:

sum(is.infinite(tbl_ready))
[1] 0

And then I try to do the heatmap by:

pheatmap(tbl_ready)

And now R doesn't do anything. No error message, no warnings messages.

What I am doing wrongly?

Do you have a plot window or some output stream open? Try running dev.off() multiple times until that shows an error, and then try the pheatmap() command.

Also, what is the output of str(data)? It will help to see how your columns are encoded.

I am not sure that you need these lines:

tbl_ready <- as.matrix(data[,2:11])
mode(tbl_ready)<-"numeric"

Usually, data.matrix() suffices.

str(data)
'data.frame':   45 obs. of  11 variables:
 $ ID : Factor w/ 44 levels "TRINITY_DN119101_c0_g1_i1",..: 23 37 20 29 5 12 11 40 31 13 ...
 $ s21: num  7.795 2670.699 0.96 0.468 0.428 ...
 $ s22: num  2.65 11313.6 2.56 1.1 1.17 ...
 $ s23: num  2.12 16209.19 2.81 1.75 1.71 ...
 $ s24: num  1.93 16420.66 2.56 1.7 1.42 ...
 $ s25: num  6.35 31275.27 6.93 4.36 4.26 ...
 $ s31: num  0.0258 18.9637 0.1557 0.0587 0.0862 ...
 $ s32: num  0.00541 4.3757 0.18037 0.09074 0.14948 ...
 $ s33: num  0.00004 1.61464 0.09336 0.05228 0.08448 ...
 $ s34: num  0.0132 3.0683 0.1556 0.0483 0.0904 ...
 $ s35: num  0.0182 7.6949 0.0568 0.0928 0.0545 ...

I have also done the dev.off() and now I get a plot!

The problem is that it doesn't seem to be very informative since I have some very high values and other quite low. but I know that there is significant differences between the two species (s21,22,23,24,25) and (s31,32,33,34,35)

pheatmap(data.matrix(data))

image of the heatmap: https://ibb.co/9qy7xW4

I see, you could try to scale the data (transform to Z-scores) and then set custom breaks:

# transform to Z-scale
mat <- t(scale(t(data.matrix(data))))

# set colour
require(RColorBrewer)
myCol <- colorRampPalette(c("dodgerblue", "black", "yellow"))(100)
myBreaks <- seq(-2, 2, length.out=100)

hmap <- pheatmap(mat,
  cluster_rows = TRUE,
  cluster_cols = TRUE,
  scale = 'none',
  breaks = myBreaks,
  col = myCol,
  show_colnames = TRUE,
  #gaps_col = c(5,10,15,20,25,30),
  #gaps_row = c(2),
  fontsize = 14,
  annotation_col = annot_col,
  annotation_colors = list(Day = c(
    "Day 0"="#4098B6",
    "Day 1"="#8DD1A4",
    "Day 2"="#DDF199",
    "Day 4"="#FDD885",
    "Day 6"="#F99254",
    "Day 8"="#DD4B4B",
    "Day 10"="#9E0142")))

That is just copied from another example that I did. Please edit as per your needs.

-------------------------

Edit: using my t(scale(t(x))) code with pheatmap(..., scale = 'none',... ) is actually the same as using pheatmap(..., scale = 'row',... ) on its own

0 answers

No answers yet.

Log in to answer this question.