Невозможно создать объект SingleCellExperiment после преобразования «SYMBOL» в «NCBI ID» - PullRequest
0 голосов
/ 26 января 2020

Я следую онлайновому учебнику по scTensor, чтобы проанализировать данные 10x Genomics от свиньи После того, как я преобразовал 'SYMBOL' в 'NCBI ID', я не могу создать объект SingleCellExperiment. Если я не сделаю преобразование, нет никаких проблем. Не могли бы вы помочь мне разобраться? Спасибо.

R version 3.6.2
scTensor version 1.2.1
pc.data <- Read10X(data.dir = ".\filtered_feature_bc_matrix\")    

for_sc <- as.matrix(pc.data)

rowID <- rownames(for_sc)

LefttoRight <- select(org.Ss.eg.db, column=c("SYMBOL", "ENTREZID"), keytype="SYMBOL", keys=rowID)
##'select()' returned 1:many mapping between keys and columns

for_sc <- convertToNCBIGeneID(for_sc, rowID, LefttoRight)

11563 of genes are removed from input matrix (25880*3011),
and only 14317 of genes are kept.

pc <- CreateSeuratObject(counts = for_sc, project = "pc", min.cells = 3, min.features = 200)

pc <- NormalizeData(pc, normalization.method = "LogNormalize", scale.factor = 10000)

Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

pc <- data.matrix(pc, rownames.force = NA)

Error in as.vector(data) :
no method for coercing this S4 class to a vector

pc <- as.matrix(GetAssayData(pc, slot = "counts"))

sce <- SingleCellExperiment(assays=list(counts = pc))

Error in validObject(.Object) :
invalid class "SummarizedExperiment" object:
'names(x)' must be NULL or a character vector with no attributes

names(pc)

NULL

sce <- as.SingleCellExperiment(pc)

Error in UseMethod(generic = "as.SingleCellExperiment", object = x) :
no applicable method for 'as.SingleCellExperiment' applied to an object of class "c('matrix', 'double', 'numeric')"

1 Ответ

0 голосов
/ 31 января 2020

У вас есть ошибка, потому что когда вы отображаете имена, это именованный вектор, который вы назначаете в качестве имен строк матрицы. Попробуйте это ниже:

Итак, предположим, у нас есть таблица подсчета, как показано ниже:

library(SingleCellExperiment)
library(Seurat)
library(org.Ss.eg.db)
set.seed(100)
GENES = sample(keys(org.Ss.eg.db,keytype="SYMBOL"),1000)
counts = matrix(rpois(1000*20,100),ncol=20,nrow=1000)
rownames(counts) = GENES
colnames(counts) = paste0("cell",1:20)
head(counts)

Мы преобразуем имена строк в id entrez:

ENTREZIDS = mapIds(org.Hs.eg.db,rownames(counts),keytype = "SYMBOL",column = "ENTREZID")
ENTREZIDS = as.character(ENTREZIDS)
table(is.na(ENTREZIDS))
FALSE  TRUE 
  527   473 

Иногда у вас есть гены не в энтрезе и это возвращает NA. Таким образом, вы либо поднастроите свою матрицу, чтобы иметь только гены энтреза, и создадите Seurat:

newcounts = counts[!is.na(ENTREZIDS),]
rownames(newcounts) = ENTREZIDS
sboj = CreateSeuratObject(newcounts)
sexpr = SingleCellExperiment(assays=list(counts = newcounts))

Или вы сохраните их

newcounts = counts
rownames(newcounts) = ENTREZIDS
rownames(newcounts)[is.na(ENTREZIDS)] = rownames(counts)[is.na(ENTREZIDS)]
sboj = CreateSeuratObject(newcounts)
sexpr = SingleCellExperiment(assays=list(counts = newcounts))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...