[Rd] Understanding tracemem

Hadley Wickham hadley at rice.edu
Thu Jul 12 18:15:06 CEST 2012

Hi all,

I've been trying to get a better handle on what manipulations lead R
to duplicate a vector, creating small experiments and using tracemem
to observe what happens (all in 2.15.1). That's lead me to a few
questions, illustrated using the snippet below.

x <- 1:10
# [1] "<0x1058f8238>"
x[5] <- 5
# tracemem[0x1058f8238 -> 0x105994ab0]:
x[11] <- 11

Why does x[5] <- 5 create a copy, when x[11] (which should be
extending a vector does not) ?  I can understand that maybe x[5] <- 5
hasn't yet been optimised to not make a copy, but if that's the case
then why doesn't x[11] <- 11 make one? I thought it might be because
somehow tracemem loses track, but adding an additional tracemem(x)
after x[5] <- 5 doesn't change the output.


Assistant Professor / Dobelman Family Junior Chair
Department of Statistics / Rice University

More information about the R-devel mailing list