使用 heatmap.2 创建差异基因表达的热图

Creating a heatmap for differential gene expression using heatmap.2

我正在尝试创建不同基因的热图,并将 运行 解决我的数据未被读取为数字的问题。我认为这是因为第一列是基因名称,接下来的 6 列是值。我已经尝试 as.matrix、as.numeric、& melt 来让它工作,但我还没有成功。示例代码如下所示(我认为)。 dat = (gene = c("gene1" , "gene2" , "gene3" , "gene4") , sample1 = c(1.3, -.6, .05, .69), sample2 = c(1.8,.05,-.98, .42))

根据 ?gplots::heatmap.2() 它需要一个只有数值的矩阵,但是当你做类似的事情时:

matrix(
  c(
    gene = c("gene1" , "gene2" , "gene3" , "gene4") ,
    sample1 = c(1.3,-.6, .05, .69),
    sample2 = c(1.8, .05, -.98, .42)
  ),
  nrow = 4
)
#>      [,1]    [,2]   [,3]   
#> [1,] "gene1" "1.3"  "1.8"  
#> [2,] "gene2" "-0.6" "0.05" 
#> [3,] "gene3" "0.05" "-0.98"
#> [4,] "gene4" "0.69" "0.42"

reprex package (v2.0.1)

于 2022-04-23 创建

你可以看到所有的值都是字符。如您所料,这是因为第一列是文本,所以如果我们删除它,我们确实会得到一个数字矩阵:

matrix(
  c(
    sample1 = c(1.3,-.6, .05, .69),
    sample2 = c(1.8, .05, -.98, .42)
  ),
  nrow = 4
)
#>       [,1]  [,2]
#> [1,]  1.30  1.80
#> [2,] -0.60  0.05
#> [3,]  0.05 -0.98
#> [4,]  0.69  0.42

reprex package (v2.0.1)

于 2022-04-23 创建

然而,我的首选解决方案是将这些值保存在数据框中:

dat <- data.frame(
  gene = c("gene1" , "gene2" , "gene3" , "gene4") ,
  sample1 = c(1.3,-.6, .05, .69),
  sample2 = c(1.8, .05, -.98, .42)
)

dat
#>    gene sample1 sample2
#> 1 gene1    1.30    1.80
#> 2 gene2   -0.60    0.05
#> 3 gene3    0.05   -0.98
#> 4 gene4    0.69    0.42

reprex package (v2.0.1)

于 2022-04-23 创建

Dataframes 可以在不同的列中存储不同 类 的值,因此您 sample* 变量不会转换为字符。

要将其返回到矩阵中,您可以对数据框进行子集化并使用 as.matrix()。这是一个使用 dplyr 进行子集化的示例:

library(dplyr)

gplots::heatmap.2(
  dat %>% select(-gene) %>% as.matrix()
)

reprex package (v2.0.1)

于 2022-04-23 创建