Cholmod 错误 'out of memory':合并修拉对象

Cholmod error 'out of memory' : Merging Seurat Objects

我正在尝试合并包含转录组计数数据(稀疏矩阵)的 Seurat class 对象。我对 R 比较陌生,所以任何 help/solutions 都表示赞赏。我已经添加了我正在使用的数据的屏幕截图。

**General Info:**
-------------

> memory.size(max = TRUE)
[1] 2533.94
R version 4.0.3 (2020-10-10)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 10 x64 (build 19041)

attached base packages:
[1] stats     graphics  grDevices utils    
[5] datasets  methods   base     

other attached packages:
[1] RSQLite_2.2.3 Seurat_3.2.3

我不确定我的存储是否有问题,或者我是否应该将功能一分为二。

 options(stringsAsFactors = F)
setwd("C:/Users/Amara/OneDrive - Virginia Tech/XieLab/ZebraFish_Project/zf_brain-master/data")
folders <- list.files("C:/Users/Amara/OneDrive - Virginia Tech/XieLab/ZebraFish_Project/zf_brain-master/data")
library(Seurat)
library(dplyr)
zfbrainList = lapply(folders,function(folder){ 
  CreateSeuratObject(counts = Read10X(folder), 
                     project = folder )
})
zfbrain.combined <- merge(zfbrainList[[1]], 
                 y = c(zfbrainList[[2]],zfbrainList[[3]],zfbrainList[[4]],zfbrainList[[5]],
                       zfbrainList[[6]],zfbrainList[[7]],zfbrainList[[8]],zfbrainList[[9]],
                       zfbrainList[[10]],zfbrainList[[11]],zfbrainList[[12]],zfbrainList[[13]],
                       zfbrainList[[14]],zfbrainList[[15]]), 
                 add.cell.ids = folders, 
                 project = "zebrafish")

.cbind2Csp(x, y) 错误: Cholmod 错误 'out of memory' 位于文件 ../Core/cholmod_memory.c,第 147 行

Data folder

用于处理原始问题中数据的机器具有 64 位 Windows 操作系统 运行 正在使用 32 位版本的 R。memory.size() 的结果显示大约 2.4Gb 的 RAM 可用于 R 使用的 malloc() 函数。Windows 上的 32 位版本的 R 在 运行在 64 位 Windows 上,根据 help for memory.size().

Memory Limits in R 告诉我们,在 Windows 上的 32 位 R 中,通常不可能分配大小为 2Gb 的单个向量,因为 windows 消耗了一些2 Gb 地址中间的内存 space.

从问题中加载数据后,zfbrainList 对象会消耗大约 1.2Gb 的 RAM。

options(stringsAsFactors = F)
folders <- list.files("./data/zebraFishData",full.names = TRUE)
library(Seurat)
library(dplyr)
zfbrainList = lapply(folders,function(folder){ 
     CreateSeuratObject(counts = Read10X(folder), 
                        project = folder )
})
format(object.size(zfbrainList),units = "Gb")

...结果:

> format(object.size(zfbrainList),units = "Gb")
[1] "1.2 Gb"

此时,代码尝试将列表中的对象合并为一个对象。

zfbrain.combined <- merge(zfbrainList[[1]], 
                          y = c(zfbrainList[[2]],zfbrainList[[3]],zfbrainList[[4]],zfbrainList[[5]],
                                zfbrainList[[6]],zfbrainList[[7]],zfbrainList[[8]],zfbrainList[[9]],
                                zfbrainList[[10]],zfbrainList[[11]],zfbrainList[[12]],zfbrainList[[13]],
                                zfbrainList[[14]],zfbrainList[[15]]), 
                          add.cell.ids = folders, 
                          project = "zebrafish")

当我们计算生成的 zfbrain.combined 对象的大小时,我们发现它的大小也约为 1.2Gb,超过了原始 poster 机器上 R 可用的 RAM。

format(object.size(zfbrain.combined),units = "Gb")

> format(object.size(zfbrain.combined),units = "Gb")
[1] "1.2 Gb"

由于在创建 zfbrain.combinedzfbrainList 必须在 RAM 中,因此无法在只有 2.4Gb RAM 可访问的 R 实例中执行上述编码的合并因为 zfbrainListzfbrain.combined 消耗的 RAM 在 2.4 - 2.5Gb 之间,不包括 R 到 运行.

所需的其他 RAM

解决方法:使用64位版本的R

由于大多数基于 Windows 的机器至少有 4Gb 的 RAM,而 memory.size() 报告的 RAM 量是 2.4Gb,机器上可能至少有 4Gb 的 RAM .原来 post 中使用的机器已经安装了 64 位 Windows,因此我们可以通过安装和 运行ning 64 位版本的 R 来启用 R 以访问更多内存。

在具有 8Gb RAM 的基于 Windows 的机器上,32 位 R 报告以下 memory.size()memory.limit()

有趣的是,R 报告 memory.size() 为 25.25,因为根据 help documentation,1Mb 被四舍五入为 0.01,但 memory.limit() 提供了 0 到 4095 之间的数字(也根据文档) .在我们的测试机器上,它报告 3583,大约 3.5Gb 的 RAM。

当我们运行这些函数在同一台机器上的64位R中时,memory.size()报告34.25,这意味着malloc()将分配一个大到3.3Gb的对象,并且 memory.limit() 报告说 R 可以访问总共 8Gb 的 RAM,这是安装在这台特定机器上的总量。

测试解决方案

当我 运行 64 位 Windows 上的 32 位 R 4.0.3 会话中的代码时,我能够复制内存不足错误。

当我 运行 64 位版本的 R 中的代码时,它 运行 完成了,我能够计算结果 zfbrain.combined 对象的大小.