2

我正在尝试合并包含转录组计数数据(稀疏矩阵)的 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 中的 Cholmod 错误“内存不足”,第 147 行

数据文件夹

zfbrainlist

4

1 回答 1

1

用于处理原始问题中数据的机器具有运行 32 位版本 R 的 64 位 Windows 操作系统。结果memory.size()显示 R 使用的malloc()函数可以使用大约 2.4Gb 的 RAM。32-根据. _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时必须在 RAMzfbrain.combined中,因此无法在只有 2.4Gb RAM 可访问的 R 实例中执行上面编码的合并,因为两者消耗的 RAMzfbrainListzfbrain.combined2.4 - 2.5Gb 之间,独占R 运行所需的其他 RAM。

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

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

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

在此处输入图像描述

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

当我们在同一台机器上在 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对象的大小。

在此处输入图像描述

于 2021-02-06T18:08:28.533 回答