Переместить значение в другую среду

Предположим, у меня есть большое значение в памяти (возможно, огромная матрица). Есть ли способ переместить это значение в другую среду вместо копирования, а затем удалить? Подход копирования / клонирования временно увеличивает объем памяти на размер значения.

Я просмотрел этот пост, но он не содержит решения моей проблемы. Совместное использование одной и той же среды (чтобы избежать копирования) не вариант. Мне действительно нужно переместить ценность.

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
Другие вопросы по тегам