[R] how modify object in parent.env

Gabor Grothendieck ggrothendieck at myway.com
Thu Mar 10 13:36:58 CET 2005


[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
: 
:




More information about the R-help mailing list