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

From: Vadim Ogranovich <vograno_at_evafunds.com>
Date: Thu 10 Mar 2005 - 06:46:32 EST


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@stat.math.ethz.ch
> [mailto:r-help-bounces@stat.math.ethz.ch] On Behalf Of Gabor
> Grothendieck
> Sent: Tuesday, March 08, 2005 4:06 PM
> To: r-help@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@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 06:56:48 2005

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