2014-04-09 9 views
24

Mam ogromną ramkę danych ładowane w środowisku globalnym w R o nazwie df. Jak zmienić nazwę ramki danych bez kopiowania ramki danych, przypisując ją do innego symbolu i usunąć oryginał?Jak zmienić nazwę zmiennej w R bez kopiowania obiektu?

+1

patrz [to] (http://stackoverflow.com/a/2717853/489704) Powiązane odpowiedź i jej komentarze. – jbaums

+1

Możesz także przeczytać [** ten wątek **] (https://stat.ethz.ch/pipermail/r-help/2008-March/156028.html). – A5C1D2H2I1M1N2O1R2T1

Odpowiedz

32

R jest na tyle sprytny, że nie robi kopii, jeśli zmienna jest taka sama, więc po prostu śmiało, ponownie przypisz i rm() oryginał.

przykład:

x <- 1:10 
tracemem(x) 
# [1] "<0000000017181EA8>" 
y <- x 
tracemem(y) 
# [1] "<0000000017181EA8>" 

Jak widać oba obiekty wskazują na ten sam adres. R tworzy nową kopię w pamięci, jeśli jedna z nich jest zmodyfikowana, tzn .: 2 obiekty nie są już identyczne.

# Now change one of the vectors 
y[2] <- 3 
# tracemem[0x0000000017181ea8 -> 0x0000000017178c68]: 
# tracemem[0x0000000017178c68 -> 0x0000000012ebe3b0]: 
tracemem(x) 
# [1] "<0000000017181EA8>" 
tracemem(y) 
# [1] "<0000000012EBE3B0>" 

Related Post: How do I rename an R object?

+13

+1, ale myślę, że mógłbyś wzmocnić tę odpowiedź pewnym "dowodem" (nawet przy użyciu czegoś tak prostego jak 'x <- 1:10, tracemem (x); y <- x; tracemem (y); rm (x) '. – A5C1D2H2I1M1N2O1R2T1

+1

Dobra rada, i to jest miły sposób, aby pokazać leniwy oceny. – evolvedmicrobe

+3

Lub' pryr :: adres() ' – hadley

0

Aby zastosować zaakceptowane odpowiedź do wielu obiektów, można użyć pętli assign(new_name, get(old_name)) następnie rm(list= old_names). Na przykład, jeśli chcesz zastąpić old_df, old_x, old_y ... z 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_')) 
Powiązane problemy