1. ホーム
  2. r

[解決済み] ヒートマップエラー : 'x' は数値行列でなければなりません。

2022-02-11 18:20:33

質問

この質問は重複しているかもしれませんが、このフォーラムに投稿された解決策をいくつか試していましたが、成功しなかったので、ここに投稿しています。

まず、再現性を高めるために私のデータセットから見てみましょう。

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

列を数値に変換してみましたが、エラーは続きます。また DC1DC2 を含むカラム NA の値を指定します。

問題を発見するために何か手助けがありますか?

解決方法は?

dataset[, 1] は文字なので as.matrix(dataset) 文字 のマトリックスを使用します。これで説明します。

'x' は、必ず 数値 マトリックス

あなたが欲しいのは

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

また、右側の行の名前を含めるにはどうしたらよいでしょうか。

を設定します。 Comparison 変数を rownames を行列の

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

つまり、あなたの本当の問題は R で列の値を既存のデータフレームの行名に変換する という問題が提示されますが heatmap .