Подтвердить что ты не робот

R переименовать объект /data.frame без промежуточного объекта

Я пытаюсь переименовать большой объект R (data.frame ~ 9GB), чтобы соответствовать некоторому уже написанному коду. Объект сохраняется с именем df1, и код написан в поисках объекта с именем df2.

Единственное предложение, которое я нашел здесь, предлагает создать новую, правильно названную версию объекта. Это не вариант ограничений памяти. Есть ли способ изменить имя объекта где-то в самой структуре или, возможно, какую-то мелкую копию? Любые предложения будут оценены.

4b9b3361

Ответ 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 создает копию объекта, изначально это только "мягкая ссылка" (т.е. объект фактически не скопирован, а просто связан с другим именем). Я подозреваю, что удаление исходного экземпляра сделает операцию переименования постоянной (т.е. Удалит софт-ссылку и переименует объект, как первоначально предполагалось). Поэтому потребление памяти не должно увеличиваться при такой операции переименования.

Смотрите: