Переместить значение в другую среду
Предположим, у меня есть большое значение в памяти (возможно, огромная матрица). Есть ли способ переместить это значение в другую среду вместо копирования, а затем удалить? Подход копирования / клонирования временно увеличивает объем памяти на размер значения.
Я просмотрел этот пост, но он не содержит решения моей проблемы. Совместное использование одной и той же среды (чтобы избежать копирования) не вариант. Мне действительно нужно переместить ценность.
1 ответ
Возможно, запись на диск, удаление, чтение с диска? Единственная потенциальная проблема, которую я могу предвидеть при таком подходе, заключается в том, что любые отношения между родительским / дочерним окружением будут потеряны. Но если вы просто пытаетесь скопировать значения из одной среды в другую, может, это не проблема?
Обновить:
Я не могу повторить то, что вы говорите о копировании. Приведенный ниже код показывает, что максимальная используемая память (как сообщает 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