R переименовать объект /data.frame без промежуточного объекта
Я пытаюсь переименовать большой объект R (data.frame ~ 9GB), чтобы соответствовать некоторому уже написанному коду. Объект сохраняется с именем df1
, и код написан в поисках объекта с именем df2
.
Единственное предложение, которое я нашел здесь, предлагает создать новую, правильно названную версию объекта. Это не вариант ограничений памяти. Есть ли способ изменить имя объекта где-то в самой структуре или, возможно, какую-то мелкую копию? Любые предложения будут оценены.
Ответы
Ответ 1
@landroni ответил на вопрос. Вот пример, показывающий, что это действительно то, как работает R.
# copy an object to a new variable name, no change in memory usage
rm(list=ls())
gc()
memory.size()
# [1] 40.15
big.obj <- seq(1e7)
memory.size()
# [1] 78.34
big.obj.renamed <- big.obj
memory.size()
# [1] 78.34
rm(big.obj)
memory.size()
# [1] 78.34
# if the first variable is modified, however, you see the evidence of a hard copy
rm(list=ls())
gc()
memory.size()
# [1] 40.15
big.obj <- seq(1e7)
memory.size()
# [1] 78.34
big.obj.renamed <- big.obj
memory.size()
# [1] 78.34
big.obj[1] <- 2 # modifying the original forces hard copy
memory.size()
# [1] 192.8
Ответ 2
Когда R создает копию объекта, изначально это только "мягкая ссылка" (т.е. объект фактически не скопирован, а просто связан с другим именем). Я подозреваю, что удаление исходного экземпляра сделает операцию переименования постоянной (т.е. Удалит софт-ссылку и переименует объект, как первоначально предполагалось). Поэтому потребление памяти не должно увеличиваться при такой операции переименования.
Смотрите: