我正在尝试合并包含转录组计数数据(稀疏矩阵)的 Seurat 类对象。我对 R 比较陌生,因此感谢任何帮助/解决方案。我添加了我正在使用的数据的屏幕截图。
**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) 中的错误:文件 ../Core/cholmod_memory.c,第 147 行中的 Cholmod 错误“内存不足”
用于处理原始问题中数据的机器具有运行 32 位 R 版本的 64 位 Windows 操作系统。结果memory.size()
显示大约 2.4Gb 的 RAM 可malloc()
用于 R 使用的函数。32-在Windows上的R位版本可以在64位Windows上运行时超过4GB的内存访问的略少最大,每帮助memory.size()
。
R 中的内存限制告诉我们,在 Windows 上的 32 位 R 中,通常不可能分配大小为 2Gb 的单个向量,因为 Windows 在 2 Gb 地址空间的中间消耗了一些内存。
一旦我们从问题中加载数据,该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,超过了原始发布者机器上 R 可用的 RAM。
format(object.size(zfbrain.combined),units = "Gb")
> format(object.size(zfbrain.combined),units = "Gb")
[1] "1.2 Gb"
由于zfbrainList
必须在RAM而zfbrain.combined
被创建的,所以不可能执行与R的一个实例,其具有的可访问的RAM只有2.4GB以上编码合并因为通过两者消耗的RAMzfbrainList
和zfbrain.combined
2.4之间-的2.5Gb,独家R 运行所需的其他 RAM。
由于大多数基于 Windows 的机器至少有 4Gb 的 RAM,并且报告的 RAM 量memory.size()
为 2.4Gb,因此机器上可能至少有 4Gb 的 RAM。原帖中使用的机器已经安装了 64 位 Windows,因此我们可以通过安装和运行 64 位版本的 R 来使 R 访问更多内存。
在基于Windows的计算机与8G的RAM,32位R报道了以下memory.size()
和memory.limit()
。
有趣的是,R 报告 25.25memory.size()
因为根据帮助文档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
对象的大小。