Być może zapisywać na dysku, usuwać, czytać z dysku? Jedynym potencjalnym problemem, jaki mogę przewidzieć przy takim podejściu, jest to, że wszelkie relacje między środowiskami nadrzędnymi/podrzędnymi zostaną utracone. Ale jeśli po prostu próbujesz skopiować wartości z jednego środowiska do drugiego, może to nie jest problem?
Aktualizacja:
nie może replikować, co mówisz o podejściu kopiowania. Poniższy kod pokazuje, że maksymalna wykorzystywana pamięć (zgłoszona przez gc
) nie wzrasta. Dzieje się tak dlatego, że wartości są "obiecane", a nie głęboko kopiowane. Kopia zostanie jednak wykonana, jeśli zmienisz obiekt w nowym środowisku, zanim usuniesz go ze starego środowiska.
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
można podać przykład jak kopiowanie ('specjalnie dla (n w ls (e1, all.names = true)) przypisać (n, dostać (n, e1), e2)') zwiększa pamięć ślad stopy? Właśnie próbowałem tego i maksymalna pamięć używana - jak donosi 'gc()' --did nie zmienia się. –
Myślę, że masz rację. Nie zwiększa to śladu pamięci. Być może z powodu obietnic? Wygląda na to, że możesz przypisać nowe środowisko i usunąć je z obecnego środowiska i dopóki nie oceniasz, jesteś dobry. – SFun28
Kopia zostanie wykonana, jeśli zmienisz obiekt w nowym środowisku przed usunięciem ze starego środowiska. –