Basically new to [R] - as a programming environment at least (had lots of recent experience compiling it on our Opteron-based servers). Was trying to write some simple little scripts (in advance of porting over some bigger things from other environments - like MATLAB), when I realized that handling counters in loop constructs in [R] is not patently obvious (at least, IMO, compared to other languages). Suppose I want to iterate something from 1 to 100, using a step size of (say) 5. Trying the obvious for(x in 1:5:100) { print(x) } (Perhaps obviously, I've borrowed the MATLAB convention to some degree). Or, looping from 0 -> 1 by 0.01? I've dug through what [R] documentation I have, and all I can find is the somewhat obtuse. For example, I can use x <- seq(0,1, by=.01) But not for(x in (0,1,by=0.01)) { print(x) } What about things that are slickly handled in C++, like for (node=start; value<threshold && node!=end; node=node->next) { ... } OK - I'm stumped (and happy to humiliate myself with what has surely got to be trivial). I'm happy with a simple basic counter at this point.
Hi, This works: for(i in seq(1,100,5)) { print(i) } Very similar to the way python does this kind of loop. Paul Evan Cooch schreef:> Basically new to [R] - as a programming environment at least (had lots > of recent experience compiling it on our Opteron-based servers). Was > trying to write some simple little scripts (in advance of porting over > some bigger things from other environments - like MATLAB), when I > realized that handling counters in loop constructs in [R] is not > patently obvious (at least, IMO, compared to other languages). > > Suppose I want to iterate something from 1 to 100, using a step size of > (say) 5. Trying the obvious > > for(x in 1:5:100) { > print(x) > } > > (Perhaps obviously, I've borrowed the MATLAB convention to some degree). > > Or, looping from 0 -> 1 by 0.01? > > I've dug through what [R] documentation I have, and all I can find is > the somewhat obtuse. > > For example, I can use > > x <- seq(0,1, by=.01) > > But not > > for(x in (0,1,by=0.01)) { > print(x) > } > > What about things that are slickly handled in C++, like > > for (node=start; value<threshold && node!=end; node=node->next) { ... } > > > OK - I'm stumped (and happy to humiliate myself with what has surely got > to be trivial). I'm happy with a simple basic counter at this point. > > ______________________________________________ > 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. >-- Drs. Paul Hiemstra Department of Physical Geography Faculty of Geosciences University of Utrecht Heidelberglaan 2 P.O. Box 80.115 3508 TC Utrecht Phone: +31302535773 Fax: +31302531145 http://intamap.geo.uu.nl/~paul
Try: for(x in seq(0,1,by=0.01)) { print(x) } The for loop in S/R is what some languages call a foreach loop, you need to provide a vector of the values to loop over. If you really want a C style for loop, then just realize that the for loop is a shorthand while loop: x <- 0 while( x < 1 ) { print(x) x <- x + 0.01 } Hope this helps, -- Gregory (Greg) L. Snow Ph.D. Statistical Data Center Intermountain Healthcare greg.snow at intermountainmail.org (801) 408-8111> -----Original Message----- > From: r-help-bounces at r-project.org > [mailto:r-help-bounces at r-project.org] On Behalf Of Evan Cooch > Sent: Friday, September 21, 2007 10:00 AM > To: r-help at r-project.org > Subject: [R] really dumb question | loop counters in > > Basically new to [R] - as a programming environment at least > (had lots of recent experience compiling it on our > Opteron-based servers). Was trying to write some simple > little scripts (in advance of porting over some bigger things > from other environments - like MATLAB), when I realized that > handling counters in loop constructs in [R] is not patently > obvious (at least, IMO, compared to other languages). > > Suppose I want to iterate something from 1 to 100, using a > step size of > (say) 5. Trying the obvious > > for(x in 1:5:100) { > print(x) > } > > (Perhaps obviously, I've borrowed the MATLAB convention to > some degree). > > Or, looping from 0 -> 1 by 0.01? > > I've dug through what [R] documentation I have, and all I can > find is the somewhat obtuse. > > For example, I can use > > x <- seq(0,1, by=.01) > > But not > > for(x in (0,1,by=0.01)) { > print(x) > } > > What about things that are slickly handled in C++, like > > for (node=start; value<threshold && node!=end; > node=node->next) { ... } > > > OK - I'm stumped (and happy to humiliate myself with what has > surely got to be trivial). I'm happy with a simple basic > counter at this point. > > ______________________________________________ > 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. >
Thanks. And thanks for the C-style tip. Greg Snow wrote:> Try: > > for(x in seq(0,1,by=0.01)) { > print(x) > } > > The for loop in S/R is what some languages call a foreach loop, you need > to provide a vector of the values to loop over. > > If you really want a C style for loop, then just realize that the for > loop is a shorthand while loop: > > x <- 0 > while( x < 1 ) { > print(x) > x <- x + 0.01 > } > > Hope this helps, > > >