Warm tip: This article is reproduced from serverfault.com, please click
r

其他-热图生成R中的cut.default错误

(其他 - cut.default error in heatmap generation R)

发布于 2020-11-27 23:50:06

我想从8 * 6数据帧生成一个热图。数据框中的最后一行具有注释列的信息。数据框的结构如下:

heatmap_try <-structure(list(BGC0000041 = structure(c(1L, 2L, 1L, 1L, 1L, 3L
), .Label = c("0", "0.447458977", "a"), class = "factor"), BGC0000128 = structure(c(1L, 
1L, 1L, 3L, 2L, 4L), .Label = c("0", "1.785875195", "4.093659107", 
"a"), class = "factor"), BGC0000287 = structure(c(1L, 1L, 1L, 
3L, 2L, 4L), .Label = c("0", "1.785875195", "4.456229186", "b"
), class = "factor"), BGC0000294 = structure(c(3L, 1L, 2L, 4L, 
1L, 5L), .Label = c("0", "2.035046947", "3.230553742", "3.286304185", 
"b"), class = "factor"), BGC0000295 = structure(c(1L, 1L, 1L, 
2L, 1L, 3L), .Label = c("0", "2.286304185", "c"), class = "factor"), 
    BGC0000308 = structure(c(4L, 2L, 3L, 5L, 1L, 6L), .Label = c("6.277728291", 
    "6.313707588", "6.607936616", "6.622871165", "6.64385619", 
    "c"), class = "factor"), BGC0000323 = structure(c(1L, 2L, 
    1L, 1L, 1L, 3L), .Label = c("0", "0.447458977", "c"), class = "factor"), 
    BGC0000328 = structure(c(1L, 2L, 1L, 1L, 1L, 3L), .Label = c("0", 
    "0.447458977", "c"), class = "factor")), class = "data.frame", row.names = c("Gut", 
"Oral", "Anterior_nares", "Retroauricular_crease", "Vagina", 
"AL"))

我用于生成热图的代码如下(我正在使用pheatmap库):

library(pheatmap)
heatmap_data1 <- heatmap_try[ c(1:5), c(1:8) ]
anotation_data <- as.data.frame(t(heatmap_try[6, ]))
row.names(anotation_data) <- colnames(heatmap_data1)
pheatmap(heatmap_data1, annotation_col = anotation_data, color = colorRampPalette(c("white","blue"))(n=100),cellwidth = 40,cellheight = 6,fontsize_row = 5,cluster_rows = F,cluster_cols = F)

但是,我收到以下错误:

Error in cut.default(x, breaks = breaks, include.lowest = T) : 
  'x' must be numeric

我做错了什么?谢谢!

Questioner
Bob
Viewed
11
7,610 2020-11-28 23:08:47

这是因为的列heatmap_data1是因子,因此它们必须是数字。一种转换方式是:

heatmap_data1_num <- as.data.frame(lapply(heatmap_data1,
                                          function(x) as.numeric(as.character(x))))

# then as before
pheatmap(heatmap_data1_num, annotation_col = anotation_data, color = colorRampPalette(c("white","blue"))(n=100),cellwidth = 40,cellheight = 6,fontsize_row = 5,cluster_rows = F,cluster_cols = F)