带有“ x”的热图错误必须是数字矩阵

时间:2018-07-31 16:45:16

标签: r matrix heatmap

我知道这个问题可能会重复,但是我尝试了在该论坛中发布的一些解决方案,但均未成功,这就是为什么我将其发布在这里。

让我们从数据集开始,使其具有可重现性。

dataset <- structure(list(Comparison = c("SH vs SAP", "SH vs NEA", "SH vs ERE", 
"SH vs ERH", "SH vs NAL", "SAP vs NEA", "SAP vs ERE", "SAP vs ERH", 
"SAP vs NAL", "NEA vs ERE", "NEA vs ERH", "NEA vs NAL", "ERE vs ERH", 
"ERE vs NAL", "ERH vs NAL"), DC1 = c(NA, NA, NA, NA, NA, 1, 1, 
1, NA, 1, 1, NA, 1, NA, NA), DC2 = c(NA, NA, NA, NA, NA, 1, 1, 
1, NA, 0, 0, NA, 1, NA, NA), DC3 = c(1, 1, 1, 1, 1, 1, 1, 1, 
0, 1, 0, 0, 1, 0, 1), DC4 = c(1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 
0, 1, 1, 1), DC5 = c(0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
1), DC6 = c(0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1), DC7 = c(0, 
1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1), DC8 = c(0, 1, 0, 1, 
1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1), DC9 = c(0, 0, 0, 0, 1, 0, 0, 
0, 0, 0, 1, 1, 0, 0, 0), DC10 = c(1, 1, 0, 1, 1, 0, 0, 0, 0, 
0, 1, 0, 1, 0, 0)), .Names = c("Comparison", "DC1", "DC2", "DC3", 
"DC4", "DC5", "DC6", "DC7", "DC8", "DC9", "DC10"), class = "data.frame", row.names = c(NA, 
15L))

我已经尝试将数据集更改为矩阵,如其他帖子所建议的那样。但是,它总是给出相同的错误

heatmap(dataset)
heatmap(as.matrix(dataset))

Error in heatmap(dataset) : 
  'x' must be a numeric matrix

Error in heatmap(as.matrix(dataset)) : 
  'x' must be a numeric matrix

我试图将列转换为数字,但错误仍然存​​在。当我删除包含DC1值的DC2NA列时,情况也是如此。

有什么发现问题的帮助吗?

1 个答案:

答案 0 :(得分:4)

dataset[, 1]是字符,所以as.matrix(dataset)字符矩阵。这说明:

  

'x'必须为数字矩阵

您可能想要

heatmap(as.matrix(dataset[, -1]))

enter image description here

  

该如何在右侧添加行名?

Comparison变量设置为矩阵的rownames

m <- as.matrix(dataset[, -1])
rownames(m) <- dataset$Comparison
heatmap(m)

enter image description here

因此,尽管实际问题是heatmap,但实际上是Convert the values in a column into row names in an existing data frame in R