Смысл функции, как это удалить гены нулевой экспрессии?
Я работаю с матрицей экспрессии, полученной с помощью секвенирования РНК из одной клетки, но у меня есть вопрос, связанный с кодом R, который прислал мне один помощник...
sort(unique(1 + slot(as(data_matrix, "dgTMatrix"), "i")))
# there isn't more details in the code...
Теоретически, эта функция заключается в удалении неэкспрессированных генов (если она равна нулю во всех образцах, она думает...), но я не могу этого понять, кто-нибудь может дать мне совет?
1 ответ
Ну, я думаю, что понял этот код... давайте попробуем объяснить это! (пожалуйста, поправьте меня, если я ошибаюсь).
Наши данные имеют структуру разреженной матрицы (т. Е. Более удобную в отношении памяти, связи) и с as
он приведен к определенному формату для этого вида матрицы (Триплетный формат для разреженных матриц, ссылка): три столбца с индексами 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
После этого берется только столбец "я" (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+
, но я думаю, что это основная концепция. Итак, подведем итог: мы берем индекс строки из этих ненулевых строк (генов) и используем его для фильтрации наших необработанных данных... еще один оригинальный метод удаления неэкспрессированных генов, интересно!