【问题标题】:heatmap error when implementing as.matrix实现 as.matrix 时出现热图错误
【发布时间】:2020-10-11 20:25:56
【问题描述】:

当我使用热图函数制作数据集的热图时,我得到一个错误,我尝试了:

df1$family <- substr(as.character(df1$gene_id), 1, nchar(as.character(df1$gene_id))-2)
df01<-df1$family
df01m<-as.matrix(df01)
heatmap(df01m)

我收到此错误:

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

1. heatmap(df01m)
2. stop("'x' must be a numeric matrix")

数据集很大,所以我删了一些:

structure(list(gene_id = structure(6:11, .Label = c("__alignment_not_unique", 
"__ambiguous", "__no_feature", "__not_aligned", "__too_low_aQual", 
"ENSG00000000005", "ENSG00000000419", "ENSG00000000457", "ENSG00000000460", 
"ENSG00000000938", "ENSG00000000971", "ENSG00000001036", "ENSG00000001084", 
"ENSG00000001167", "ENSG00000001460", "ENSG00000001461", "ENSG00000001497", 
"ENSG00000001561", "ENSG00000001617", "ENSG00000001626", "ENSG00000001629", 
"ENSG00000001630", "ENSG00000001631", "ENSG00000002016", "ENSG00000002079", 
"ENSG00000002330", "ENSG00000002549", "ENSG00000002586", "ENSG00000002587", 
"ENSG00000002726", "ENSG00000002745", "ENSG00000002746", "ENSG00000002822", 
"ENSG00000002834", "ENSG00000002919", "ENSG00000002933", "ENSG00000003056", 
"ENSG00000003096", "ENSG00000003137", "ENSG00000003147", "ENSG00000003249", 
"ENSG00000003393", "ENSG00000003400", "ENSG00000003402", "ENSG00000003436", 
"ENSG00000003509", "ENSG00000003756", "ENSG00000003987", "ENSG00000003989", 
"ENSG00000004059", "ENSG00000004139", "ENSG00000004142", "ENSG00000004399", 
"ENSG00000285989", "ENSG00000285990", "ENSG00000285991", "ENSG00000285992", 
"ENSG00000285993", "ENSG00000285994"), class = "factor"), expr = c(6L, 
754L, 447L, 426L, 5L, 1L)), row.names = c(NA, 6L), class = "data.frame")

数据集的头部:

        gene_id         expr
           <fct>       <int>
1   ENSG00000000005     6
2   ENSG00000000419     754
3   ENSG00000000457     447
4   ENSG00000000460     426
5   ENSG00000000938     5
6   ENSG00000000971     1

【问题讨论】:

    标签: r


    【解决方案1】:

    错误表明我们需要一个数字matrixsubstr 函数返回一个 character 字符串。所以,我们可以将substring vector 转换为numeric

    df01m <- as.matrix(as.numeric(df01))
    

    另一个问题是heatmap 需要至少有 2 行/2 列的matrix。这里as.matrixvector 转换为单列matrix,它可能不起作用

    【讨论】:

    • @user432797 当有非数字元素时发生,即as.numeric(c('1', '3', 'hello'))
    • @user432797 热图需要一个数字矩阵。如果gene_id 是第一列,则将data.frame 转换为matrix,并将gene_id 作为行名
    • @user432797 我检查了您的新更新数据。 substr 正在返回 substr(as.character(df1$gene_id), 1, nchar(as.character(df1$gene_id))-2) [1] "ENSG000000000" "ENSG000000004" "ENSG000000004" "ENSG000000004" "ENSG000000009" "ENSG000000009"
    • @user432797 你可以使用geom_tile from ggplot,但它需要多一列,即ggplot(data = df1, aes(x = gene_id, expr )) + geom_tile()
    • @user432797 你可以使用fill 作为第二列
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多