Error: vector memory exhausted (limit reached?)

2023-10-21 10:07:22 浏览数 (3)

记录一下今天碰到的error:

今天在处理单细胞数据的时候,出现了如题所示的报错 (in Rstudio)

在数据合并的之后scale数据的时候报错的,代码如下:

代码语言:javascript复制
//  合并数据
sce.big <- merge(gse175453list[[1]],
y = c(gse175453list[[2]],
gse175453list[[3]],
gse175453list[[4]],
gse175453list[[5]],
gse175453list[[6]],
gse175453list[[7]],
gse175453list[[8]],
gse175453list[[9]],
gse242127list[[1]],
gse242127list[[2]],
gse242127list[[3]],
gse242127list[[4]],
gse242127list[[5]],
gse242127list[[6]]),
add.cell.ids = ids,
project = "gse175453_gse242127")

//标准化下游流程
sce.big <- NormalizeData(sce.big)
sce.big <- ScaleData(sce.big, vars.to.regress = c("nCount_RNA"), model.use = 'linear', use.umi = FALSE)
Error: vector memory exhausted (limit reached?) #提示报错

通过一番检索之后,发现生信技能树的Jimmy老师以前发过的一篇文章提及了一个问题:即某些数据库并没有对数据进行过滤,会导致sample中存在几十万个细胞,这样未过滤的数据在进行下游数据分析的时候很明显会对内存有极高的要求。

我在前期处理数据的时候也发现gse175453这个数据库每个sample都存在70多万个细胞,如下图所示:

代码语言:javascript复制
// 其中一个sample的数据,32738个基因,73万个细胞
An object of class Seurat 
32738 features across 737280 samples within 1 assay 
Active assay: RNA (32738 features, 0 variable features)

通过一系列filter之后,再次run ScaleData()就没有报错了。

具体filter可参考如下代码:(隔空感谢Jimmy老师)

代码语言:javascript复制
// 
gse175453list <- lapply(gse175453list,function(x){
  subset(x,subset=nFeature_RNA > 200 & nFeature_RNA < 8000 & nCount_RNA > 400)
})
gse175453list <- lapply(gse175453list,function(x){
  rownames(x)[grepl('^mt-',rownames(x),ignore.case = T)]
  x[["percent.mt"]] <- PercentageFeatureSet(x, pattern = "^MT-")
  subset(x,subset = percent.mt < 10)
})

0 人点赞