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