问题标签 [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.
rstudio - RcppArmadillo + bigmemory 使 Windows RStudio 崩溃(但没有其他 GUI + OS.type)
我正在开发一个 R 包,bigKRLS
. bigKRLS
在 Windows RGui 上工作,但在 Windows RStudio 上遇到致命错误。一些细节...
Windows RGui 工作,但 Windows RStudio 遇到致命错误;使用 R 3.3.0、3.3.1、3.3.3 在四台不同的机器上确认;RTools 3.3 和 3.4 遵循Coatless 教授推荐的最佳实践;RStudio 1.0.136;Windows 7 和 8。目前,bigKRLS
适用于 Mac OS X Yosemite 和 Ubuntu 14.04 的 RStudio 没有问题。
bigKRLS
取决于bigmemory
、Rcpp
、RcppArmadillo
和snow
(但问题早于最近添加的snow
,可以通过设置禁用以进行测试bigKRLS(..., Ncores = 1)
)。
上面的代码产生了从 R2 = 0.663 开始的模型估计(我们当然在其他平台上估计了很多更复杂的模型)。
Windows RStudiolibrary(bigKRLS)
在没有警告的情况下加载;bigKRLS()
输出它已成功清理数据。除其他外,这意味着y和X现在是big.matrix objects
。然后是第一个“真正的”步骤:bigKRLS()
调用bGaussKernel()
,这是会话在两分钟左右后中止的地方。不过好像也没什么问题bGaussKernel()
。bGaussKernel()
如果在一秒钟内从命令行调用,它运行得很好。事实上,如果你初始化每个bigKRLS()
需要的变量,你就可以在 Windows RStudio 中运行它的所有代码。
目前,该软件包会检测何时使用 Windows RStudio 并安全退出该功能,将用户引导至 RGui。任何有关更好解决方法的建议将不胜感激!
r - 在 R 中处理大型数据集
我正在处理一个相对较大的数据集(5 个文件,每个 2GB,为您提供一个数量级的表,其中一个表是 1.5M 行 x 270 列),我使用 dplyr left_joint 函数(在这些数据集和其他小表之间)。这些表包含我不想丢失的字符串数据。然而,使用处理大型数据集的包(如 bigmemory 或 ff)会将字符串转换为因子,然后转换为数字,这意味着数据会丢失。有没有办法在不丢失信息的情况下操纵这些文件(使用我的 8GB RAM)?
r - 使用共享内存进行并行化 [bigmemory]
在尝试使其在并行场景 [doSNOW] 中工作时遇到了一些困难,其中涉及到共享内存 [bigmemory] 的使用。总结是我在一些 foreach 工作人员中收到以下错误“ { 中的错误:任务 1 失败 - “无法打开连接” ”。更具体地说,检查集群输出日志,它与“ '/temp/x_bigmatrix.desc': Permission denied ”有关,就像对 big.matrix 描述符文件的并发访问存在问题一样。
请原谅我,但因为代码有点复杂,我不包括一个可重现的例子,而是试图解释要点的工作流程是什么。
我有一个矩阵 X,它通过以下方式转换为 big.matrix:
然后,我使用 doSNOW [我在 Windows 10 x64 上] 初始化 sock 集群:
(showConnections() 正确显示已注册的连接)
现在我必须解释一下,我对每个工作人员都有一个主循环(foreach),然后,有一个内部循环,每个工作人员在 X 中的行上循环。主要思想是,在主语料库中,每个工作人员都被喂食通过内部循环顺序处理大量数据,然后,每个工作人员可以存储其中一些观察结果,而不是自己存储观察结果;他们存储行索引以供后验检索。为了使事情变得更加复杂,每个工作人员都修改了存储索引的关联 R6 类环境。我这样说是因为对 big.matrix 描述符文件的访问发生在两个不同的地方:主 foreach 循环和每个 R6 环境中。foreach主要语料库如下:
尝试访问文件中支持的 big.matrix 时,问题发生在内部循环中。因为如果我更改这些环境中的行为以显式存储观察结果而不是行索引(因此,无法再访问这些对象中的描述符文件),那么它可以正常工作。此外,如果我在没有并行化 [registerDoSEQ()] 的情况下运行它,但将行索引存储在对象中,也不会出现错误。因此,如果我在不同的 R6 环境中混合并行化和对共享 big.matrix 的双重访问,就会出现问题。奇怪的是,一些工人可以比其他工人运行更长的时间,甚至最后至少有一个完成它的运行......所以这让我想到了同时访问 big.matrix 描述符文件的问题.
我在这里的一些基础知识失败了吗?
r - R:具有大内存的distm
我正在尝试在 R 中使用 bigmemory 来计算超过 100,00,000 行(粗略估计)和 16 列的距离矩阵
一小部分数据看起来像这样
如何使用 bigmemory 构建海量 dist 矩阵?
r - 仍在努力处理大型数据集
我一直在这个网站上阅读,但无法找到确切的答案。如果它已经存在,我为重新发布而道歉。
我正在处理非常大的数据集(在具有 32 GB RAM 的计算机上,6 亿行,64 列)。我真的只需要这些数据的小得多的子集,但是除了简单地用 fread 导入一个数据集并选择我需要的 5 列之外,我还在努力执行任何功能。之后,我尝试用我需要的特定条件覆盖我的数据集,但我达到了我的 RAM 上限并收到消息“错误:无法分配 4.5 GB 的向量大小。我将 ff 和 bigmemory 包作为替代方案,但似乎就像你在导入这些包之前不能子集一样?除了升级计算机上的 RAM 之外,有没有解决这个问题的方法?
我正在尝试执行的任务:
在这一点上,我达到了我的记忆上限。尝试使用另一个包但导入所有 64 列的 6 亿行会更好吗?我也不想仅仅为了执行一次导入而花费数小时。
r - R 的 bigmemory 中 big.matrix 和文件 backed.big.matrix 的区别?
我需要创建一个包含 0 和 1(大约 500K 行和 20K 列)的大文件,为此我使用了 R 中的 bigmemory 包。
现在因为这对我来说是新的,我还没有设法完全找到我的查询的答案。
sessionInfo R 版本 3.3.0 平台:x86_64-pc-linux-gnu (64-bit) 运行于:Scientific Linux 6.9
这两者有什么区别?我想知道将 1 分配给 big1 或 big2 中的某些单元格时有什么区别?在这两种情况下初始化时,它们是否保存在支持和描述符文件中?还是必须做其他事情?
我保存了会话的 .RData (在第一个实例中使用 big1 而没有支持和描述符文件),然后在尝试将其加载到 R 时,它导致了一个致命错误并终止了会话。所以我想知道我可以在这里更有效地加载.RData,而不是每次都浪费几个小时来重做所有事情。
非常感谢。
r - R bigmemory 总是使用支持文件?
我们正在尝试使用带有 foreach 的 BigMemory 库来并行我们的分析。但是, as.big.matrix 函数似乎总是使用 backingfile。我们的工作站有足够的内存,有没有办法在没有备份文件的情况下使用 bigMemory?
这段代码x.big.desc <-describe(as.big.matrix(x))
非常慢,因为它将数据写入C:\ProgramData\boost_interprocess\
. 不知何故,它比直接保存 x 慢,是 as.big.matrix 具有较慢的 I/O 吗?
这段代码x.big.desc <-describe(as.big.matrix(x, backingfile = ""))
非常快,但是,它也会将数据的副本保存到 %TMP% 目录。我们认为它之所以快,是因为 R 启动了后台写入过程,而不是实际写入数据。(R提示返回后我们可以在TaskManager中看到写线程)。
有没有办法仅将 BigMemory 与 RAM 一起使用,以便 foreach 循环中的每个工作人员都可以通过 RAM 访问数据?
谢谢您的帮助。
r - bigmemory 库中的矩阵大小是否受 R 中的“最大向量大小”限制?
我们有一个大矩阵无法放入 bigmemory,因为它超过了 max_vector_size,有没有办法解决这个问题?
a = matrix(rnorm(200e6 * 15), 200e6)
b = as.big.matrix(a, backingfile="")
Error in SetMatrixElements(x@address, as.double(j), as.double(i), as.double(value)) :
long vectors not supported yet: ../include/Rinlinedfuns.h:138
Error during wrapup: long vectors not supported yet: ../include/Rinlinedfuns.h:138
谢谢你。JC
r - 在 R 中计算大矩阵的零空间
我找不到任何函数或包来计算 R 中bigmatrix
(from library(bigmemory)
) 的零空间或 (QR 分解)。例如:
我尝试了以下但得到了显示的错误。如何找到bigmemory
对象的零空间?
r - 在 R 中处理大数据集
我在 R 给出Can not allocate vector of size XX Gb
错误消息时遇到了内存问题。我有一堆 netcdf 格式的每日文件(12784 天),在 1305x378(经纬度)网格中给出海面温度。这每天给出 493290 点,当移除 NA(超过陆地点)时减少到大约 245000。
我的最终目标是为每日文件中的 245000 个点中的任何一个构建一个时间序列,并找到每个点的时间趋势。我的想法是构建一个大数据框,每行一个点,每列一天(2450000x12784),这样我就可以将趋势计算应用于任何点。但是随后,在构建这样的数据框时,正如预期的那样,出现了内存问题。
首先,我尝试了一个我以前用来读取数据并通过读取 nc 文件然后融合数据来提取三列(lon-lat-sst)数据帧的脚本。当尝试一小部分天时,这会导致计算时间过长,并导致内存问题。然后我尝试将日常文件分成纵向切片;这避免了内存问题,但 csv 输出文件太大并且该过程非常耗时。
我尝试过的另一种策略没有成功,它是顺序读取所有 nc 文件,然后提取每个点的所有每日值并找到趋势。然后我只需要保存一个 245000 点数据框。但我认为这将是耗时的,而不是正确的 R 方式。
我一直在阅读big.memory
并ff
尝试声明 big.matrix 或 3D 数组(1305 x 378 x 12784)的包,但现在还没有成功。
面对这个问题的适当策略是什么?
- 提取单点时间序列以计算单个趋势并填充较小的数据框
- 对切片中的每日文件进行子集以避免内存问题,但以大量数据帧/文件结尾
- 尝试用 bigmemory 或 ff 包解决内存问题
在此先感谢您的帮助
编辑 1 添加代码以填充矩阵
编辑 2 在先前(较小)数据帧中用于计算时间趋势的代码。原始数据是一个时间序列矩阵,每一列都是一个序列。
fecha 是日期变量名
编辑 2 来自 F. Privé 答案的工作代码
使用此代码创建了一个大矩阵