tracemem                package:base                R Documentation

_T_r_a_c_e _C_o_p_y_i_n_g _o_f _O_b_j_e_c_t_s

_D_e_s_c_r_i_p_t_i_o_n:

     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.

_U_s_a_g_e:

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

_A_r_g_u_m_e_n_t_s:

       x: An R object, not a function or environment or 'NULL'.

previous: A value as returned by 'tracemem' or 'retracemem'.

_D_e_t_a_i_l_s:

     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 mathematical operations
     produces a message to standard output.  The message consists of
     the string 'tracemem', 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 (e.g. 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.

     These functions are primitive and use positional matching of
     arguments.

_V_a_l_u_e:

     A character string for identifying the object in the trace output
     (an address in hex enclosed in angle brackets), or 'NULL'
     (invisibly for 'untracemem'.

_S_e_e _A_l_s_o:

     'trace', 'Rprofmem'

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

_E_x_a_m_p_l_e_s:

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

     ## copying in lm
     d <- stats::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)

