[R] How to make the assignment in a for-loop not affect variables outside the loop?

John Fox jfox at mcmaster.ca
Thu Dec 10 13:05:39 CET 2009


Try

    n=10
    b=1
    local(
        for(i in 1:n) {
          n=3
          print(n)
          b <<- b*i
        }
        )
    
    print(n)
    print(b)
    
or
    
    n=10
    b=1
    local(
        for(i in 1:n) {
          n=3
          print(n)
          assign("b", b*i, env=.GlobalEnv)
        }
        )
    
    print(n)
    print(b)

John

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On
> Behalf Of Peng Yu
> Sent: December-09-09 11:03 PM
> To: r-help at stat.math.ethz.ch
> Subject: Re: [R] How to make the assignment in a for-loop not affect
> variables outside the loop?
> 
> 2009/11/22 Uwe Ligges <ligges at statistik.tu-dortmund.de>:
> > Either use local as in:
> >
> > n=10
> >
> > local(for(i in 1:n){
> >     n=3
> >     print(n)
> > })
> >
> > print(n)
> 
> 'local()' makes everything inside it unavailable outside of it. Is
> there a way to make 'n' unavailable outside but still make 'b'
> available outside without using 'function'?
> 
> n=10
> b=1
> local(
>     for(i in 1:n) {
>       n=3
>       print(n)
>       b=b*i
>     }
>     )
> 
> print(n)
> print(b)
> 
> 
> > or write a function that is evaluated in its own environment:
> >
> > n=10
> >
> > MyLoopFoo <- function(){
> >    for(i in 1:n){
> >        n <- 3
> >        print(n)
> >    }
> > }
> >
> > MyLoopFoo()
> >
> > print(n)
> >
> >
> >
> >
> > Uwe Ligges
> >
> >
> > Peng Yu wrote:
> >>
> >> I know that R is a dynamic programming language. But I'm wondering if
> >> there is a way to make the assignment in a for-loop not affect
> >> variables outside the loop.
> >>
> >>> n=10
> >>> for(i in 1:n){
> >>
> >> +     n=3
> >> +     print(n)
> >> + }
> >> [1] 3
> >> [1] 3
> >> [1] 3
> >> [1] 3
> >> [1] 3
> >> [1] 3
> >> [1] 3
> >> [1] 3
> >> [1] 3
> >> [1] 3
> >>>
> >>> print(n)
> >>
> >> [1] 3
> >>
> >> ______________________________________________
> >> 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.
> >
> 
> ______________________________________________
> 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