[R] Assignment of structures on a given environment

Rita Ribeiro rita at liacc.up.pt
Wed Oct 17 12:32:41 CEST 2001


Hi,

I've already read something about it, and I known that when passing
arguments to
functions, R only passes a "promise" . The argument is copied only if
its value is
changed. But the problem is that I'm sucessively building a list along
the functions
calls, so the value is always updated....

Rita


David A Richmond wrote:

> I was having trouble with a similar issue recently, until I was
informed
> that arguments to functions aren't copied unless they're altered. So I
can
> pass a large matrix through a routine with as many sublevels as i need
and
> the matrix won't be recreated everytime I pass it to another function.
Is
> this the problem you're trying to avoid?
>
> dave
>
> On Tue, 16 Oct 2001, Rita Ribeiro wrote:
>
> > 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
> >
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

> >
>
> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> |David Richmond                It works on a          |
> + Dept. of Sociology          complex scientific      +
> |Saint Mary's College          principle, known as    |
> + Notre Dame, IN 46556               "pot luck."      +
> |219-284-4517                    - The Doctor         |
> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>
>
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-

> 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
>
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._




-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list