R: Trace copying of objects

tracemem {utils} | R Documentation

## Trace copying of objects

### Description

This function marks an object so that a message is printed whenever the internal function `duplicate` is called. This happens when two objects share the same memory and one of them is modified. It is a major cause of hard-to-predict memory use in R.

### Usage

    tracemem(x)
    untracemem(x)
    retracemem(x, previous=NULL)

### Arguments

`x` | An R object, not a function or environment or `NULL`
`previous` | An address specification as returned by `tracemem` or `retracemem`

### Details

This functionality is optional, determined at compilation, because it makes R run a little more slowly even when no objects are being traced. `tracemem` and `untracemem` give errors when R is not compiled with memory profiling; `retracemem` does not (so it can be left in code during development).

When an object is traced any copying of the object by the C function `duplicate` or by arithmetic or mathmetical operations produces a message to standard output. The message consists of the string `memtrace`, the identifying strings for the object being copied and the new object being created, and a stack trace showing where the duplication occurred. `retracemem()` is used to indicate that a variable should be considered a copy of a previous variable (eg after subscripting).

The messages can be turned off with `tracingState`.

It is not possible to trace functions, as this would conflict with `trace` and it is not useful to trace `NULL`, environments, promises, weak references, or external pointer objects, as these are not duplicated.

### Value

A string for identifying the object in the trace output.

### See Also

`trace`

`Rprofmem`

http://developer.r-project.org/memory-profiling.html

### Examples

    ## Not run:
    a<-1:10
    tracemem(a)
    ## b and a share memory
    b<-a
    b[1]<-1

    ## copying in lm
    d<-rnorm(10)
    tracemem(d)
    lm(d~a+log(b))

    ## f is not a copy and is not traced
    f<-d[-1]
    f+1
    ## indicate that f should be traced as a copy of d
    retracemem(f, retracemem(d))
    f+1

    ## End(Not run)

[Package utils version 2.4.1 Index]