.Alias-deprecated            package:base            R Documentation

Create Alias (Pointer) to R Object

Description:

     `.Alias' creates an alias to another (part of) an R object which
     is more (memory-) efficient than usual assignment.

Usage:

     .Alias(expr)

Arguments:

    expr: an R expression; typically a name.

Details:

     Use as `new <- .Alias(expr)', where `new' is a new name by which
     `expr' can be accessed.

Value:

     an identical copy of `expr'.

Warning:

     This has a dangerous semantic, and consequences can be unexpected
     (it can be used to defeat the call-by-value illusion). Know what
     you are doing before using `.Alias'!

See Also:

     `<-' for usual assignments.

Examples:

     mop <- options()
     mop$browser <- "a browser"   # not set on all platforms
     Op <- .Alias(mop)
     ## A change to mop is reflected in Op and vice versa
     ## -- ONLY if no new slots are created ...
     mop$digits <- "Wow!"
     Op$browser <- "another one"
     mop$browser; Op$digits
     all(names(mop) == names(Op) &
         sapply(seq(mop), function(i) all(Op[[i]] == mop[[i]])))
     ##> TRUE -- Op and mop ARE the same thing !

     mop$newslot <- pi #--->> 'newslot' ==> (shallow) COPY of 'mop'
     Op$newslot # R: still the old one, i.e. NULL
     all(names(mop) == names(Op))# no longer TRUE

     ## Feel the power: `call by reference', a function modifying its argument:
     tst.Al <- function(x) {
        y <- .Alias(x) ; attributes(y) <- NULL ; invisible()
     }
     (x0 <- structure(1:5, my.att = "Y"))
     tst.Al(x0) # *changes* x0 :
     x0
     stopifnot(is.null(attributes(x0)))

