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

Как переименовать переменную в R без копирования объекта?

У меня есть огромный фрейм данных, загруженный в глобальную среду в R с именем df. Как переименовать кадр данных без копирования фрейма данных, назначив его другому символу и удалив исходный файл?

4b9b3361

Ответ 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_'))