嗯,我想我已经理解了这个代码...让我们试着解释它! (请纠正我,如果我错了)。
我们的数据有稀疏矩阵(即关于内存的详细handly,link),用as
它强制转换为特定的格式,这种矩阵(稀疏矩阵三元组格式,link)的结构:三列与i和j索引为这些非零值。
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,]
我与sort
和1+
有点糊涂,但我认为这是基本的概念。因此,总结一下,我们从这个非零行(基因)中取出行索引,并用它来过滤我们的原始数据......另一种删除非表达基因的原始方法,有趣!
你的对象data_matrix被转换为dgTMatrix,这个对象可能有不同的插槽,但你只对I感兴趣。出于某种原因你给它们加1,而你只保留唯一的值。没有什么是“删除”的。这很难进一步帮助,考虑给我们输出(head(dgTMatrix,50))' –
@Moody_Mudskipper,谢谢你的帮助!我想我刚刚了解代码(请参阅下面的答案)。 – jgarces