Re: [R] how modify object in parent.env

From: Gabor Grothendieck <ggrothendieck_at_myway.com>
Date: Thu 10 Mar 2005 - 23:36:58 EST

[I sent this last night but it does not appear to have shown up so this is second attempt. Apologies if this gets posted twice.]

The search for the left hand side of the <<- starts in the parent while search for the right side is in the current environment so:

x <- 1:3
local( for (i in seq(along = x)) { x <- 99; x[i] <<- x } )

Its important not to define the local x prior seq(along = x) so that that seq(along=x) refers to the x in the parent. If you do define it first and therefore need to force reference to the parent x use get or eval in the seq:

  seq(along = get("x", parent.frame()))

Actually, it may be less confusing to just use a different, but related, variable name. If you don't like x0, perhaps x. would be ok:

x <- 1:3
local( { x. <- 99; for (i in seq(along = x)) x[i] <<- x. } )

Vadim Ogranovich <vograno <at> evafunds.com> writes:

:
: Thank you to Gabor and Mark Schwartz for the answers. Both of them
: solved the problem I posted, but my actual problem, as I now see, is a
: little bit more involved. Let me try again.
:
: I have a vector 'x'. I want to compute its entries in a loop (yes, I
: know...). Say
:
: x = seq(3)
:
: for (i in seq(length(x)) {
: x0 = someValue
: x[i] = x0
: }
:
: There are two problems with the above code:
: 1. x0 pollutes the global envirnoment (not to mention possible
: over-write of an existing x0). Therefore I thought I'd wrap it with
: local().
: 2. x0 is not a good name from a readability perspective. I'd rather call
: it x to emphasize it's an entry in an outer vector 'x'. (In this small
: example it doesn't really matter, but I have much more involved scripts
: where consistent naming is important)
:
: Gabor's solution solves 1 but not 2. Maybe there is a simple way around
: this restriction?
:
: Thanks,
: Vadim
:
: > -----Original Message-----
: > From: r-help-bounces <at> stat.math.ethz.ch
: > [mailto:r-help-bounces <at> stat.math.ethz.ch] On Behalf Of Gabor
: > Grothendieck
: > Sent: Tuesday, March 08, 2005 4:06 PM
: > To: r-help <at> stat.math.ethz.ch
: > Subject: Re: [R] how modify object in parent.env
: >
: >
: > You can use "<<-" like this:
: >
: > x <- 1:3
: > local(x[1] <<- x[1]+1)

: >
: > Vadim Ogranovich <vograno <at> evafunds.com> writes:
: >
: > :
: > : Assign() re-binds the value, not modifies it (the latter is what I
: > : needed)
: > :
: > : > -----Original Message-----
: > : > From: McGehee, Robert [mailto:Robert.McGehee <at>
: > geodecapital.com]
: > : > Sent: Tuesday, March 08, 2005 3:48 PM
: > : > To: Vadim Ogranovich; r-help <at> stat.math.ethz.ch
: > : > Subject: RE: [R] how modify object in parent.env
: > : >
: > : > This isn't an environment problem. Assigning something to a
: > : > get call doesn't make any sense. Use assign.
: > : >
: > : > > a <- 5
: > : > > get("a") <- 10
: > : > Error: couldn't find function "get<-"
: > : >
: > : > And from the ?assign help page, you can pick what environment
: > : > you want to make the assignment. Just pick the parent environment.
: > : >
: > : >
: > : > -----Original Message-----
: > : > From: Vadim Ogranovich [mailto:vograno <at> evafunds.com]
: > : > Sent: Tuesday, March 08, 2005 6:36 PM
: > : > To: r-help <at> stat.math.ethz.ch
: > : > Subject: [R] how modify object in parent.env
: > : >
: > : >
: > : > Hi,
: > : >
: > : > Is it possible to modify an object in the parent.env (as
: > opposed to
: > : > re-bind)? Here is what I tried:
: > : >
: > : > > x = 1:3
: > : > # try to modify the first element of x from within a new
: > environment
: > : > > local(get("x", parent.env(environment()))[1] <- NA)
: > : > Error in eval(expr, envir, enclos) : Target of assignment
: > expands to
: > : > non-language object
: > : >
: > : > # On the other hand retrieval works just fine
: > : > > local(get("x", parent.env(environment()))[1])
: > : > [1] 1
: > : >
: > : > Thanks,
: > : > Vadim
: > : >
: > : > ______________________________________________
: > : > R-help <at> stat.math.ethz.ch mailing list
: > : > https://stat.ethz.ch/mailman/listinfo/r-help
: > : > PLEASE do read the posting guide!
: > : > http://www.R-project.org/posting-guide.html
: > : >
: > :
: > : ______________________________________________
: > : R-help <at> stat.math.ethz.ch mailing list
: > : https://stat.ethz.ch/mailman/listinfo/r-help
: > : PLEASE do read the posting guide!
: > http://www.R-project.org/posting-guide.html
: > :
: > :
: >
: > ______________________________________________
: > R-help <at> stat.math.ethz.ch mailing list
: > https://stat.ethz.ch/mailman/listinfo/r-help
: > PLEASE do read the posting guide!
: > http://www.R-project.org/posting-guide.html
: >
:
: ______________________________________________
: R-help <at> stat.math.ethz.ch mailing list
: https://stat.ethz.ch/mailman/listinfo/r-help
: PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
:
:



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Thu Mar 10 23:57:06 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:30:42 EST