You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在iCAMP::bNRI.cm()中使用big.matrix.descriptor格式的大型进化距离矩阵?

问题:将big.matrix.descriptor传入iCAMP::bNRI.cm()的dis参数(低内存占用)

我希望使用iCAMP::bNRI.cm()函数,但该函数要求系统发育距离矩阵为实际矩阵类型。我的矩阵规模庞大,已保存为big.matrix.descriptor格式:

new("big.matrix.descriptor", description = list(sharedType = "FileBacked", 
    filename = "pd.bin", dirname = "/dirpath/", 
    totalRows = 5122L, totalCols = 5122L, rowOffset = c(0, 5122
    ), colOffset = c(0, 5122), nrow = 5122, ncol = 5122, rowNames = NULL, 
    colNames = NULL, type = "double", separated = FALSE))

我可以将其加载为descriptor对象,请问如何在不占用过多内存的情况下,将该descriptor指定为iCAMP::bNRI.cm()的dis参数?示例调用代码如下:

bnri.whole <- bNRI.cm(comm=otu, dis=descriptor?, nworker = 4, memo.size.GB = 50...)

解决方案

1. 加载descriptor为文件-backed的big.matrix对象

使用bigmemory包的attach.big.matrix()函数,将descriptor映射为磁盘-backed的big.matrix对象,该对象不会将整个矩阵加载到内存,仅在需要时读取磁盘数据:

library(bigmemory)
# 假设你的descriptor对象已加载,名为pd_desc
pd_big <- attach.big.matrix(pd_desc)

2. 直接传入bNRI.cm()的dis参数

big.matrix类支持标准的矩阵索引操作,若bNRI.cm()内部通过常规索引访问矩阵元素,可直接将pd_big传入dis参数:

library(iCAMP)
bnri.whole <- bNRI.cm(comm = otu, dis = pd_big, nworker = 4, memo.size.GB = 50)

3. 备选方案:内存可控时转换为普通矩阵

针对你当前5122×5122的矩阵,转换为普通矩阵的内存占用约200MB,多数场景下可直接执行:

pd_matrix <- as.matrix(pd_big)
bnri.whole <- bNRI.cm(comm = otu, dis = pd_matrix, nworker = 4, memo.size.GB = 50)

内容的提问来源于stack exchange,提问作者Geomicro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:26:14