2017-06-06 20 views
0

我与单细胞RNA测序获得的表达矩阵的工作,但我必须使用R代码的一个队友给我发了相关的一个问题...函数含义,它是如何删除零表达基因的?

sort(unique(1 + slot(as(data_matrix, "dgTMatrix"), "i"))) 
# there isn't more details in the code... 

从理论上讲,这个功能是删除没有表达的基因(如果它在所有样本中都为零,它认为...),但是我不可能理解它,任何人都可以给我一个小费?

+0

你的对象data_matrix被转换为dgTMatrix,这个对象可能有不同的插槽,但你只对I感兴趣。出于某种原因你给它们加1,而你只保留唯一的值。没有什么是“删除”的。这很难进一步帮助,考虑给我们输出(head(dgTMatrix,50))' –

+0

@Moody_Mudskipper,谢谢你的帮助!我想我刚刚了解代码(请参阅下面的答案)。 – jgarces

回答

0

嗯,我想我已经理解了这个代码...让我们试着解释它! (请纠正我,如果我错了)。

我们的数据有稀疏矩阵(即关于内存的详细handly,link),用as它强制转换为特定的格式,这种矩阵(稀疏矩阵三元组格式,link)的结构:三列与ij索引为这些非零值。

y <- matrix_counts # sparse matrix   
       AAACCTGAGAACAACT-1 AAACCTGTCGGAAATA-1 AAACGGGAGAGCTGCA-1 
ENSG00000243485     1     .     .     
ENSG00000237613     .     .     2 

y2 <- as(y, "dgTMatrix") #triplet format for sparse matrix 
    i j x 
1 9 1 1 #in row(9) and column(1) we have the value 1 
2 50 1 2 
3 60 1 1 
4 62 1 2 
5 78 1 1 
6 87 1 1 

后,只需要列的“i”(slot(data, "i")),因为我们只需要行索引(知道行是零不同),并删除重复(unique)最终得到的是矢量与该行的索引将被用于过滤原始数据:

y3 <- unique(1 + slot(as(exprs(gbm), "dgTMatrix"), "i")) 
[1] 9 50 60 62 78 87 
data <- data_raw[y3,] 

我与sort1+有点糊涂,但我认为这是基本的概念。因此,总结一下,我们从这个非零行(基因)中取出行索引,并用它来过滤我们的原始数据......另一种删除非表达基因的原始方法,有趣!