У меня есть огромный фрейм данных, загруженный в глобальную среду в R с именем df
. Как переименовать кадр данных без копирования фрейма данных, назначив его другому символу и удалив исходный файл?
Как переименовать переменную в R без копирования объекта?
Ответ 1
R достаточно умен, чтобы не сделать копию, если переменная такая же, поэтому просто перейдите, переназначьте и rm()
оригинал.
Пример:
x <- 1:10
tracemem(x)
# [1] "<0000000017181EA8>"
y <- x
tracemem(y)
# [1] "<0000000017181EA8>"
Как мы видим, оба объекта указывают на один и тот же адрес. R создает новую копию в памяти, если один из них модифицирован, то есть: 2 объекта больше не идентичны.
# Now change one of the vectors
y[2] <- 3
# tracemem[0x0000000017181ea8 -> 0x0000000017178c68]:
# tracemem[0x0000000017178c68 -> 0x0000000012ebe3b0]:
tracemem(x)
# [1] "<0000000017181EA8>"
tracemem(y)
# [1] "<0000000012EBE3B0>"
Связанная запись: Как переименовать объект R?
Ответ 2
Чтобы применить принятый ответ ко многим объектам, вы можете использовать цикл assign(new_name, get(old_name))
, за которым следует rm(list= old_names)
. Например, если вы хотите заменить old_df
, old_x
, old_y
,... с помощью new_df
, new_x
...
for (obj_old_name in ls(pattern='old_')){
assign(sub('old_','new_',obj_old_name), get(obj_old_name))
}
rm(list=ls(pattern='old_'))