2016-12-20 79 views
0

我已经为EnsembIDs和三个样本(RNA-seq - > kallisto - > sleuth)创建了前100个差异表达转录本的热图。用于热图的数字矩阵的字符矩阵

library(gplots) # heatmap.2 
library(dplyr) # unite 

heatmap.2(log(tmp_df+1), trace="none", density.info="none", scale="row") 

现在我有兴趣在热图中添加基因名称,例如, EnsemblD_genename。为了这个目的,我已经如下进行:

1)创建 “ext_gene” 在tmp_df

tmp_df["ext_gene"] <- NA 

2)匹配的target_id从tmp_df柱top_100new(含有ext_gene的target_id)

tmp_df$ext_gene <- top_100new$ext_gene[match(tmp_df$target_id, top_100new$target_id)] 

3)合并tmp_df中的target_id和ext_gene列(target_id_ext_gene列代替target_id和ext_gene列)

unite <- unite(tmp_df, target_id__ext_gene, target_id, ext_gene, sep='_') 

4)我无法将“unite”转换为数字矩阵,因为一列“target_id__ext_gene”在某些行中有NA,例如, ENSEMBL00001_NA,所以我试图用NONE替换NA。 5)但是,我仍然无法将“unite”转换为数字矩阵,因为列“target_id__ext_gene”具有字符类。我曾尝试使用

unite$target_id__ext_gene <- as.numeric(as.character(unite$target_id__ext_gene)) 

但是,它列“target_id__ext_gene”的所有行转换为NA(NAs introduced by coercion

我知道,数字对象可以传递给heatmap.2而且只有我坚持由于一个字符列。

这是我的数据怎么看起来像使用重现(联合):

    target_id__ext_gene  T2 Npt3   n1 Npt1 Npt2  T3 
    1)    ENS00000112_NONE 5239.1161 0.000000e+00 1.117028e+03 0.000000e+00 0.000000e+00 3905.476311 
    2)    ENS00000150_tfb2m 771.3926 1.012137e+03 4.132779e-06 7.785302e+02 7.625490e+02 634.195429 
... 
    99)    ENS00000130_NONE 136.2607 1.658801e+00 1.498763e+02 2.733379e+00 0.000000e+00 64.313849 
    100)   ENS00000124_NONE 606.0573 1.155628e+02 3.062783e+02 1.054907e+02 1.084090e+02 430.250175 

       n3   n2   T1 
1) 1.327292e+03 1.401719e+03 4230.5667240 
2) 1.561575e-06 1.113367e-06 526.1571307 
... 
99) 1.511978e+02 1.240264e+02 68.4360589 
100) 3.817887e+02 4.725010e+02 636.0279422 
+1

请阅读关于[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)以及如何给出[可重现的示例]的信息(http://stackoverflow.com /问题/ 5963269)。这会让其他人更容易帮助你。 – zx8754

+0

不需要“第1步”。 – zx8754

+0

@ zx8754,我只是想从头开始提供全部细节。 – gbioinfo

回答

2

的问题很可能是heatmap.2需要数字矩阵,并期待rownames作为标签。但是,您可以从数据中完成此操作,而无需设置rownames。

首先,一些实际再现的数据:

df <- 
    data.frame(
    target_id__ext_gene = LETTERS 
    , matrix(rnorm(26*6, 50, 5) 
      , nrow = 26) 
) 

然后,通过数字部分以heatmap.2作为基体(带出标记列),并在标签通过显式:

heatmap.2(
    as.matrix(df[, -1]) 
    , labRow = df$target_id__ext_gene 
) 

产地:

enter image description here

您可以使用其他设置进一步修改您想要的设置。

+0

据我所知,rmorm函数产生的随机数字的分布是正常的,但howcome是50和sd是5.对于我的数据,我不知道mean和sd的值或我需要计算。或者根据[link](cyclismo.org/tutorial/R/probability.html),mean和sd是可选参数。所以我用'df < - unite(target_id__ext_gene = LETTERS,matrix(rnorm(100 * 9),nrow = 100))'因为我有100行和9列。我得到了这个错误:**联合错误(target_id__ext_gene = LETTERS,矩阵(rnorm(100 * 9),:未使用的参数(target_id__ext_gene = LETTERS)** – gbioinfo

+0

我只是玩过,并能够做到这一点没有rnorm和更新''heatmap.2'',这里是'> heatmap.2(log(as.matrix(unite [,-1])+ 1),labRow = unite $ target_id__ext_gene,trace =“none”,density.info =“none “,xlab = NULL,ylab = NULL,main =”Heatmap“,col = redgreen(75),margin = c(5.5,8),scale =”row“,cexCol = 0.8,cexRow = 0.5) – gbioinfo

+0

'df'的构建只是为了展示一个例子,因为你没有提供可重复的数据,所以这个例子是必需的,因此它不会(显然)与你的实际数据相匹配。同样:是的,你在评论中写的是我的回答是匹配你的实际数据,然而'labRow'之外的选项并不是你问题的MCVE的一部分(因此为什么我在我的答案中省略了这些选项) –