热力图错误:“x”必须是一个数值矩阵

7

我知道这个问题可能会重复,但是我尝试了一些在这个论坛发布的解决方案却没有成功,所以我在这里发布。

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

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

我试图将这些列转换为数字,但是错误一直存在。即使我删除了包含NA值的DC1DC2列也是如此。

请问有什么方法可以找出问题所在吗?

1个回答

15

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

所以你真正的问题实际上是将R中现有数据框中一列的值转换为行名称,尽管问题是用heatmap呈现的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接