我正在尝试合并包含转录计数数据(稀疏矩阵)的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)中出错:文件中的Cholmod错误'out of memory‘../Core/cholmod_memory y.c,第147行

发布于 2021-02-07 02:08:29
用于处理原始问题中的数据的计算机具有运行32位版本R的64位Windows操作系统。memory.size()的结果显示,R使用的malloc()函数大约有2.4 4Gb的内存可用。32位版本的R在Windows上运行时,每个help for memory.size()最多只能访问略低于4 4Gb的内存。

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

一旦我们加载了问题中的数据,zfbrainList对象就消耗了大约1.2 we的内存。
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")对结果执行...and命令:
> 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.2‘s,这超过了原始poster机器上可供R使用的内存。
format(object.size(zfbrain.combined),units = "Gb")
> format(object.size(zfbrain.combined),units = "Gb")
[1] "1.2 Gb"由于在创建zfbrain.combined时zfbrainList必须在内存中,因此不可能在只有2.4 of内存可访问的R实例中执行上述编码的合并,因为zfbrainList和zfbrain.combined消耗的内存都在2.4-2.5 of之间,不包括R运行所需的其他内存。
解决方案:使用64位版本的R
由于大多数基于Windows的机器至少有4 4Gb的内存,而memory.size()报告的内存量是2.4 4Gb,所以很可能机器上至少有4 4Gb的内存。最初的文章中使用的机器已经安装了64位Windows,因此我们可以通过安装和运行64位版本的R来使R能够访问更多的内存。
在具有8 8Gb内存的基于Windows的计算机上,32位R为memory.size()和memory.limit()报告以下内容。

有趣的是,R报告memory.size()为25.25,因为每个help documentation的1Mb向下舍入为0.01,但memory.limit()提供了一个介于0和4095之间的数字(也符合文档)。在我们的测试机器上,它报告了3583,大约3.5 of的RAM。
当我们在同一台计算机上的64位R中运行这些函数时,memory.size()报告34.25,这意味着malloc()将分配3.3 8Gb的单个对象,而memory.limit()报告R可以访问总共8 8Gb的内存,这是安装在这台特定计算机上的总量。

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

当我在64位版本的R中运行代码时,它运行到结束,并且我能够计算得到的zfbrain.combined对象的大小。

https://stackoverflow.com/questions/66079047
复制相似问题