假设我有一个在内存中占用很大的值(比如一个巨大的矩阵)。有没有一种方法可以将该值移动到另一个环境中,而不是复制然后再删除?复制/克隆方法会临时增加该值大小的内存占用。
我查看了这篇文章,但它并没有解决我的问题。共享相同的环境(以避免复制)不是一种选择。我确实需要移动该值。
假设我有一个在内存中占用很大的值(比如一个巨大的矩阵)。有没有一种方法可以将该值移动到另一个环境中,而不是复制然后再删除?复制/克隆方法会临时增加该值大小的内存占用。
我查看了这篇文章,但它并没有解决我的问题。共享相同的环境(以避免复制)不是一种选择。我确实需要移动该值。
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
for(n in ls(e1, all.names=TRUE)) assign(n, get(n, e1), e2)
)如何增加内存占用?我刚刚尝试了一下,通过gc()
报告的最大内存使用量没有改变。 - Joshua Ulrich