我有一个大的"大矩阵",我需要从中删除一些列.它是使用CSV文件(7200万行)创建的

BigMat <- read.big.matrix("matrix.csv", type="double", header=TRUE,
                     backingfile="matrix.bin",
                     descriptorfile="matrix.desc")

这成功地将矩阵加载到R中,但我没有足够的内存空间来创建一个新对象,当我try 将此矩阵子集时:

BigMatSub <- BigMat[, 5:71]

它给了我:Error: cannot allocate vector of size 37.6 Gb.

有什么方法可以在不达到内存限制的情况下删除列?我需要有它作为"大.矩阵"的对象在最后使用在biglasso().

矩阵是稀疏的,有许多零值.

非常感谢您的帮助.

推荐答案

因此,您使用的是bigmemory包.难怪您可以将完整的矩阵"存储在内存中".

我以前没有用过bigmemory.但是直观地说,如果我们要提取的子集仍然太大,我们在子集之后仍然需要一个"大矩阵",而不是将其强制为正则密集矩阵.您得到的错误消息意味着通常的"["不尊重"大矩阵"对象,并试图返回37.6GB的密集矩阵.哇!这意味着你的"大矩阵"大约有75322188行!

在软件包的PDF手册中搜索"子集",我发现您可以try :

BigMatSubset <- deepcopy(BigMat, cols = 5:71)

有趣的是,该手册还记录了"["个.但它没有明确说明我们是否会失go "big.matrix"类,而得到一个正则矩阵.为了验证,您可以提取一个非常小的子集:

what <- BigMat[1:10, 1:4]

看看what是否是正则稠密矩阵.


Update

搜索"[r]deepcopy"只得到7 posts (excluding this answer) so far个.最相关的是:

在阅读这些帖子时,我还发现了函数sub.big.matrix.搜索"[r]sub.big.matrix"只得到2 posts so far (excluding this answer),这两个答案都是Charles Determanbigmemory的作者:

我现在确信,sub.big.matrix岁是一个更好的 Select .

All these posts are tagged with . So I will edit your question to include this tag, too.

R相关问答推荐

在R中使用GG Plot时如何 suppress 等值线图中的彩色条

如何在热图中绘制一个图形,但在每个单元格中通过饼形图显示?

将一个载体的值相加,直到达到另一个载体的值

将模拟变量乘以多个观测结果中的模拟变量

查找具有平局的多个列的最大值并返回列名或平局 destruct 者NA值

根据收件箱中的特定值提取列名

整数成随机顺序与约束R?

如何使下一个按钮只出现在Rshiny 的一段时间后?""

在R中使用download. file().奇怪的URL?

即使硬币没有被抛出,也要保持对其的跟踪

提取第一个下划线和最后一个下划线之间的任何内容,例外情况除外

如何通过判断数据框的一列来压缩另一列?

从圆到R中的多边形的标绘雷达图

KM估计的差异:SvyKm与带权重的调查

如何使这些react 表对象相互独立?

如何删除R中除数字元素以外的所有元素

计算Mean by分组和绑定到R中的数据集

数据集上的R循环和存储模型系数

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

如何将图例文本添加到图例符号中