问题标签 [r-bigmemory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 计算 R 中 big.matrix 的对角线
我正在处理几个 1.3e6 行的大平方矩阵,我想要它们的对角线。我需要一种有效的方法来做到这一点,但我不能使用 diag()
任何想法?非常感谢您的宝贵时间
r - 如何在 R 中执行 big.matrix 的逐行乘法?
- 假设
A
是一个 R 矩阵。如果我想对 vector 中的元素执行逐行乘法vec
,我可以这样做:
sweep( A, 1, vec, "*" )
.
A
如果是big.matrix
R 对象,是否有类似但有效的方法来做同样的事情?
- 我的主要目标如下:我有两个大矩阵维度 ~
3500x3500
元素,A
和B
. 我想做以下操作:
B %*% sweep( A, 1, vec, "*" )
.
我必须在多次迭代中进行这些矩阵乘法,但vec
每次迭代都会单独改变。所以我认为 big.matrix/bigalgebra 包可能会提供方便的方法来进行这种矩阵乘法,但是需要处理逐行乘法。(我意识到我可以将vec
条目转换为对角线 big.matrix 并进行完整的乘法运算,但我宁愿只处理上面的对角线条目。)任何想法/是否有其他替代包可以做同样的事情?
我非常感谢任何帮助!谢谢!
r - R中几个big.matrix对象的元素平均值,na.rm = TRUE
这个问题与这里提出的问题非常相似:Element-wise mean of several big.matrix objects in R。
但是,现在我的目标是计算 18 个文件支持的 big.matrix 对象(每个 > 4GB)的元素平均值,同时考虑到 na.rm = TRUE。
对于正常大小的矩阵,我会执行以下操作:
我正在使用具有 16GB RAM 的 64x Windows10 机器。
任何建议都非常受欢迎。谢谢!
r - 如何将 2.8 GB gzipped (40 GB TSV) 文件批量读取到 R 中?
我有一个包含 31 个 gzip 压缩 TSV(2.8 GB 压缩/40 GB 未压缩)的目录。我想根据 1 列的值有条件地导入所有匹配的行,并组合成一个数据框。
我在这里阅读了几个答案,但似乎没有一个有效 - 我怀疑它们不适合处理那么多数据。
简而言之,我该如何:
- 读取 3 GB 的 gzip 文件
- 仅导入其列与某个值匹配的行
- 将匹配的行合并到一个数据框中。
数据很整齐,只有 4 列感兴趣:日期、ip、类型(str)、类别(str)。
我尝试使用的第一件事read_tsv_chunked()
:
第一种方法适用于 9 GB 的未压缩数据,但不适用于 40 GB。
fread()
使用(相同加载的包)的第二种方法:
看起来它开始工作了,但后来被锁定了。我无法弄清楚如何将select = c(colnames)
参数传递到/调用fread()
内部,更不用说一列的过滤条件了。map()
str_c()
r - bigmemory 创建的后备文件和描述符文件是否应该检查到版本控制中?
我想知道处理使用读取时创建的描述符文件(foo.desc
)和支持文件( )的最佳实践是什么foo.bin
foo.csv
read.big.matrix(...)
据我所知,backingfile默认是 RDS 文件,descriptorfile是纯文本文件。所以理论上它们都是跨平台的并且可以签入,但我的猜测是支持文件会发生很大变化,应该被版本控制忽略。有人在这里有经验吗?
r - 如何释放崩溃 R 会话的 big.matrix 对象使用的内存
我使用bigmemory包并行访问大矩阵对象,例如像这样
但是,使用生成的对象有时会导致 R 崩溃。这意味着矩阵对象使用的内存没有被释放。bigmemory手册警告这种情况,但没有提出解决方案:
突然关闭的 R(使用例如任务管理器)将没有机会最终确定 big.matrix 对象,这将导致内存泄漏,因为 big.matrix 将保留在内存中(可能以混淆的名称)而没有简单的方法将 R 重新连接到它们
在我的 R 进程发生几次崩溃和重新启动后,我收到以下错误:
显然,我的记忆被孤立的大矩阵阻塞了。我尝试了命令ipcs
,它被宣传为列出共享内存块,但是与我的矩阵对象相比,列出的段的大小太小了。这也意味着ipcrm
在这里删除我的孤立对象是没有用的。
bigmemory在不同操作系统上将其对象存储在哪里,如何删除孤立对象?
r - 200k 条记录的数据帧的内存问题
我有 2 个矩阵,每个矩阵有 200k 条记录(一个是大的 get_sentences - review_phrases,另一个是 review_scores)。将它们绑定到数据帧中,需要将其写入 csv,但会出现内存错误。我应该怎么办?软件包 bigmemory 或 ff 有帮助吗?
我正在使用 Windows 10 64 位 8GB RAM。内存限制给出以下输出:
这是代码:
我得到输出:
r - 使用字符向量中的 2000 多个唯一元素拆分数据帧的最有效方法是什么
问题是基于使用返回列表对象的函数拆分数据帧split()
,理论上我想做的是通过包含超过 2000 个唯一记录的 id 列拆分数据帧,但是这样做似乎会产生内存问题,虽然这可以计算出来,我既不能在 GUI 中访问,也不能在 R 终端/Rstudio 中引用它。或者,我一直在研究 ff 包,但不确定它是否会起作用,目前正在寻找解决问题的新方法。
我尝试过:
1)split()
id
的函数 2)split()
不同的较小长度字符向量的函数
3)
拆分后:我想将多行中的所有交易信息合并为一行,即一行代表一个完整的交易(在每月/每年的时间段内)
因此通过聚合从粒度空间转移到粒度较小的空间。
原始数据(逗号是分隔符)
预期结果:
或者(编码方法如下所示):
可重现的代码块
r - 如何使用 sqlite 数据库填充 bigstatsr::FBM 以供以后使用?
我是 bigstatsr 软件包的新手。我有一个 sqlite 数据库,我想将其转换为 40k 行(基因)60K 列(样本)的 FBM 矩阵以供以后使用。我找到了如何用随机值填充矩阵的示例,但我不确定用我的 sqlite 数据库中的值填充矩阵的最佳方法是什么。
目前我按顺序执行,这里有一些模拟代码:
我有两个问题:
- 有没有办法更有效地填充矩阵?不确定是否可以在这里使用 big_apply,也许是 foreach
- 我是否总是必须使用 big_write 以便稍后加载我的矩阵?如果是这样,为什么我不能只使用 bk 文件?
提前致谢
r - 分配 bigmemory 3D 数组
我想使用并行包中的 mclapply 函数来计算值并将它们分配给 3D 数组。计算很长,我需要并行化它。然后,我想将结果放入 3D 数组中。我的第一个猜测是像这样使用 <<- :
这不起作用:),因为单个工作人员无法再访问 result_array 的主副本。我知道可以将结果放入数据框中,然后再创建一个数组。但是,我有很多行,实际上没有数组结构,它达到了数据帧可以拥有的最大行数。我查看了一些可以从并行工作者中访问的数据结构,并从 bigmemory 包中找到了 big.matrix。但是,这些只是 2D 矩阵,而不是 3D 数组。3D 数组有类似的东西吗?或任何其他建议如何解决我的困境?
非常感谢!