Skip to content

Assignment of structures on a given environment

2 messages · Rita Ribeiro, Robert Gentleman

#
Hi,

In order to avoid deep copies by passing large arguments to functions or

returning values, I'm trying to do the assignment of variables in a
given environment. The problem is when I try to assign a structure: a
list for example.

If I have:
    ind <- c("a","b")

my idea is doing something like

    l <- alist()
    l[ind] <- as.list(c(20,40))

 in a given environment.



Example:
    ref <- new.env()
    (.....)
    assign("l",alist(),env=ref)


    If I do
        assign("l$a",20,env=ref)

    it creates me a new variable in the ref environment  named "l$a"



    So,  I did:

    eval(l <- alist(), env=ref)

    but this creates the l list both on the current and on the ref
environment.


    The alternative solution that I found out was:

    evalq(l<-alist(),env=ref)

    and then

        evalq(ind <-c("a","b"), env=ref)
        evalq(l[ind] <- as.list(c(20,40)), env=ref)


I would like to know if there is another possible solution, instead of
doing these 'evalqs' along the program code.


Thanks,

    Rita



-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
On Tue, Oct 16, 2001 at 04:40:34PM +0100, Rita Ribeiro wrote:
This is what you asked it to do.
  Environments work at the level of whole objects. I'm not sure what
  it would mean for l$a to exist in ref if l doesn't exist in ref.
  So, you just assign l into the environment and retrieve it from the
  environment, using get.

  If you you have only one list then perhaps you do not want to put
  the list in, rather just the elements.

   names <- names(l)
   for(i in 1:length(l)) assign(names[i], l[[i]], env=ref)

   you then have a and b, for example, in the environment and can
   extract them.
  
   If you have two lists, l1 and l2 and both have a's and b's as
   components then you have to put in the whole list (or adopt a
   naming convention).

   One might ask whether you are sure that you need to do this?
   I work on very large data sets and copying has pretty much never
   been an issue.