2016-06-22 3 views
2

Есть ли способ в R, чтобы просто переименовать кадр данных без первого копирования существующего фрейма данных, присвоив ему новое имя, а затем удалив оригинал?Переименуйте рамку данных без копирования, а затем удалите оригинал?

Я понимаю, что скопированный фрейм данных не требует дополнительной памяти. Я просто хочу ограничить количество объектов в моей среде RStudio, чтобы уменьшить путаницу и возможные ошибки ниже по течению.

Например:

df <- data_frame(a = c(1:5), 
      b = c(6:10)) 

Я знаю, что всегда могу это сделать

df2 <- df 

# Or this 
assign('df2', df) 

Но в обоих случаях я все еще нужно удалить df, поэтому я предпочел бы сделать что-то вроде этого:

df3 <- rename(df2) 
+0

Возможный дубликат [Что такое семантика копирования-на-модификации в R, а где - канонический источник?] (Http://stackoverflow.com/questions/15759117/what-exactly-is-copy-on- modify-semantics-in-r-and-where-is-the-canonical-source) – zx8754

+0

что-то вроде этого https://rhandbook.wordpress.com/tag/rename-data-frame/ – user5249203

+0

@ zx8754 моя цель в основном ограничьте количество объектов в моей среде, не удаляя явным образом объект с исходным именем. – TClavelle

ответ

0

Вы обеспокоены созданием нового объекта и проблем с хранением? Потому что, согласно сообщению @ Хэдли в этом потоке http://r.789695.n4.nabble.com/renaming-objects-td851715.html, если вы просто назначаете два объекта, то такое же значение R фактически не создает новый объект. Следуя примеру Хедли вы можете увидеть, что «R будет только создать копию, если или б модифицируется»:

a <- data.frame(a = c(1:5),b = c(6:10)) 
gc() 
      used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 1661290 88.8 2564037 137.0 2403845 128.4 
Vcells 2354971 18.0 7963162 60.8 63055235 481.1 

b <-a 
gc() 
      used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 1661285 88.8 2564037 137.0 2403845 128.4 
Vcells 2354961 18.0 7963162 60.8 63055235 481.1 

Один хороший способ концептуализации это может думать о a и b, как только указатели на тот же объект в R. Таким образом, объект хранится только один раз, но может называться как a, так и b.

+0

Смотрите мой комментарий к @ zx8754 выше о моей цели. Ваш ответ действительно полезно знать! – TClavelle