r - 将值移动到不同的环境

标签 r memory environments

假设我有一个内存很大的值(可能是一个巨大的矩阵)。有没有办法将该值移动到不同的环境而不是复制然后删除?复制/克隆方法会根据值的大小暂时增加内存占用。

我查看了此 post但它不包含我的问题的解决方案。共享相同的环境(以避免复制)不是一种选择。我确实需要移动值。

最佳答案

也许是写入磁盘、删除、从磁盘读取?我可以预见这种方法的唯一潜在问题是父/子环境之间的任何关系都将丢失。但是,如果您只是尝试将值从一个环境复制到另一个环境,也许这不是问题?

更新:

我无法复制您所说的复制方法。下面的代码显示使用的最大内存(由 gc 报告)没有增加。这是因为这些值是“ promise 的”,而不是深度复制的。但是,如果您在从旧环境中删除对象之前更改了新环境中的对象,则会创建一个副本。

R> e1 <- new.env()
R> e1$x <- numeric(5e7)
R> e1$y <- numeric(5e7)
R> gc()
            used  (Mb) gc trigger  (Mb)  max used  (Mb)
Ncells    171022   9.2     350000  18.7    350000  18.7
Vcells 100271746 765.1  110886821 846.0 100272535 765.1
R> e2 <- new.env()
R> for(n in ls(e1, all.names=TRUE))
+   assign(n, get(n, e1), e2)
R> gc()
            used  (Mb) gc trigger  (Mb)  max used  (Mb)
Ncells    171038   9.2     350000  18.7    350000  18.7
Vcells 100271788 765.1  116511162 889.0 100272535 765.1
R> identical(e1$x,e2$x)
[1] TRUE
R> identical(e1$y,e2$y)
[1] TRUE

关于r - 将值移动到不同的环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14733187/

相关文章:

c - 关于 BMP 文件。我如何写入/更改像素颜色? (在C中)

javascript - JavaScript 对象的内存使用

ruby-on-rails - Heroku 使用生产配置而不是暂存配置

git - 如何在 git 上设置与默认作者不同的默认提交者?

r - 使用两个变量并排的ggplot条形图

r - 如何交换 R 中两列子集中的值?

c++ - 如何为这个链表正确分配内存

r - 提取数据帧的行索引,其条目对应于另一个数据帧的行

r - 将日期向量转换为排名

javascript - EmberJS,如何为不同的 "config variables"管理不同的 "environments"