将值移动到其他环境

SFu*_*n28 10 memory r environments

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

我查看了这篇文章,但它不包含我的问题的解决方案.共享相同的环境(避免复制)不是一种选择.我确实需要移动价值.

Jos*_*ich 6

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

更新:

我无法复制你对复制方法的看法.下面的代码显示使用的最大内存(由报告gc)不会增加.这是因为值是"承诺的",而不是深度复制.但是,如果在从旧环境中删除对象之前更改新环境中的对象,则将进行复制.

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
Run Code Online (Sandbox Code Playgroud)