[Rd] Understanding tracemem
Prof Brian Ripley
ripley at stats.ox.ac.uk
Thu Jul 12 19:33:59 CEST 2012
On 12/07/2012 18:20, Hadley Wickham wrote:
>> Read the help carefully as to what 'copy' means:
>>
>> When an object is traced any copying of the object by the C
>> function ‘duplicate’ produces a message to standard output, as
>> does type coercion and copying when passing arguments to ‘.C’ or
>> ‘.Fortran’.
>>
>> If you want to understand when 'duplicate' is called, you need to read the
>> source code. File src/main/subassign.c will explain the different paths
>> taken by your two cases. But isn't it rather obvious that duplicating x is
>> not useful when a new longer vector needs to be created?
>
> Thanks, that's useful.
>
> Is there any way to detect when a new longer vector is created? i.e.
> I know that this creates a new vector:
Not programmatically.
> x <- 1:10
> x[11] <- 11L
>
> And this doesn't
>
> y <- list2env(as.list(x))
> y$a <- 11
>
> But does this?
>
> z <- as.list(x)
> z$a <- 11
Yes of course, as z is now of length 11. There is no provision in R to
extend a vector except by creating a new one. (Well, there is at C
level but I think it is not currently used.)
> And thanks to the off-list commenters who pointed out that x[5] <- 5
> is duplicated because 5 is numeric, not integer (oops!)
AFAIK, it does not actually duplicate: see 'type coercion' above. But
note that
x <- 1:10
tracemem(x)
x[10:1] <- x
necessarily duplicates.
>
> Hadley
>
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-devel
mailing list