[R] variable scope

R. Michael Weylandt michael.weylandt at gmail.com
Tue Aug 28 20:37:48 CEST 2012


On Tue, Aug 28, 2012 at 1:29 PM, Sam Steingold <sds at gnu.org> wrote:
> At the end of a for loop its variables are still present:
>
> for (i in 1:10) {
>   x <- vector(length=100000000)
> }
> ls()
>
> will print "i" and "x".
> this means that at the end of the for loop body I have to write
>
>   rm(x)
>   gc()
>
> is there a more elegant way to handle this?

Wrap the loop in local() scope perhaps? This might get tricky if you
need to save some results from the loop, but I think you're ok if they
are initialized outside the loop and you use super-assignment. Almost
always you shouldn't need manual garbage collection.

Something like: # Terribly impractical, but gets the point across

y <- numeric(100)
local({
  for(i in 1:10){
      x <- rnorm(10)
      y[10*(i-1) + 1:10] <<- x
  }
})

print(x) # Error
print(y)

Doubt that works out to be significantly more elegant however.

Michael

>
> Thanks.
>
> --
> Sam Steingold (http://sds.podval.org/) on Ubuntu 12.04 (precise) X 11.0.11103000
> http://www.childpsy.net/ http://camera.org http://palestinefacts.org
> http://iris.org.il http://www.PetitionOnline.com/tap12009/ http://truepeace.org
> Computers are like air conditioners: they don't work with open windows!
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list