Forse scrivere su disco, cancellare, leggere dal disco? L'unico problema potenziale che posso prevedere con questo approccio è che tutte le relazioni tra ambienti genitori/figli andranno perse. Ma se stai semplicemente provando a copiare i valori da un ambiente all'altro, forse questo non è un problema?
Aggiornamento:
non posso replicare quello che dici circa l'approccio di copia. Il codice seguente mostra che la memoria massima utilizzata (come riportato da gc
) non aumenta. Questo perché i valori sono "promessi", non copiati in profondità. Tuttavia, verrà eseguita una copia se si modifica un oggetto nel nuovo ambiente prima di eliminarlo dal vecchio ambiente.
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
fonte
2013-02-06 16:02:27
Potete fornire un esempio di come la copia (in particolare 'for (n a ls (e1, all.names = TRUE)) assegnare (n, ottenere (n, e1), e2)') aumenta la memoria orma? L'ho appena provato e la memoria massima utilizzata - come riportato da 'gc()' --did non cambia. –
Penso che tu abbia ragione. Non aumenta l'impronta della memoria. Forse a causa delle promesse? Sembra che tu possa assegnare a un nuovo ambiente e rimuoverlo dall'ambiente corrente e finché non lo valuti sei bravo. – SFun28
Una copia verrà eseguita se si modifica un oggetto nel nuovo ambiente prima di averlo eliminato dal vecchio ambiente. –