0

我想在从 MATLAB 导入的表上绘制热图。该表已明确显示行名和列名,我已将其加载到 R 中read.table,我可以运行summary(i)并获取每列的数字摘要:

i = read.table("file.txt",header=TRUE)

但是当我尝试运行时heatmap,它抱怨转换后的矩阵不是数字,无论有无rownames.force=TRUE

is.matrix(as.matrix(i,rownames.force=TRUE))
[1] TRUE

heatmap(as.matrix(i,rownames.force=TRUE))
 Error in heatmap(as.matrix(i, rownames.force = TRUE)) : 
   'x' must be a numeric matrix

我认为问题在于as.matrix尝试转换非数字行名(或列名,我不确定了:-():

as.matrix(i)[1]
[1] "cluster-594-walk-0161"

有任何想法吗?

4

2 回答 2

2

如果没有可重现的示例,我们只能猜测出了什么问题,但错误表明矩阵不包含数字,而是(可能)字符。这是否有效:

i = as.numeric(i)
heatmap(as.matrix(i,rownames.force=TRUE))

什么是输出:

is.numeric(as.matrix(i)[1])

(可能FALSE)。


编辑:您的编辑显示矩阵包含字符,而不是数字。可能是在文本文件中,行名作为附加列包含在内,可能是第一列。在这种情况下:

i = read.table("file.txt", header = TRUE, row.names = 1)

将第一列读取为行名。所以问题很可能出在 中read.table,而不是在转换为矩阵中。

于 2012-06-25T10:21:14.667 回答
0

解决方案是先定义行名称,然后将数据框转换为矩阵,然后再次插入原始名称。它应该可以完美运行

rnames <- data[,1]    # assign labels in column 1 to "rnames"

mat_data <- data.matrix(data[,2:ncol(data)])  # transform column 2-5 into a matrix

rownames(mat_data) <- rnames                  # assign row names

heatmap.2(mat_data, col=redblue(256), scale="row", key=T, keysize=1.5, trace="none",cexCol=0.9,srtCol=45)   # your heatmap
于 2017-11-08T06:53:40.997 回答