[R] help with executing instruction every i-th run of loop

Barry Rowlingson b.rowlingson at lancaster.ac.uk
Thu May 17 17:17:31 CEST 2007


Mark W Kimpel wrote:
> I am running a very long loop and would like to save intermediate 
> results in case of a system or program crash. Here is the skeleton of 
> what my code would be:
> 
> for (i in 1:zillion)

I'm a bit worried about this line:

  > 1:zillion
  > Error: cannot allocate vector of size 4 zillion bytes

  hmm, lets try on a machine with a few more zillion bytes of RAM:

  > 1:zillion
  Error: result would be too long a vector

> Is there an even better way to address my need?

  Looping over vectors like this involves the uneccesary creation of a 
long vector. For anything up to a million its probably okay, but once 
you start getting into the zillions...

  You can do it with less storage by just having a while loop:

  > while (i != 100 ){print(i);i=i+1}

  Many modern computer languages have "iterators" for looping, which 
abstract all the looping functionality into an object. I started writing 
something for R a few years ago but never got round to finishing it. It 
let you do this:

  myLoop <- loop(N=10,step=1,start=1)
  while(iterate(myLoop)){
   doSomething()
  }

  The 'myLoop' object here is the iterator that controls the looping. 
You can use it to get the iteration number and then use the  i %% 1000 
test everyone else has told you about by now...

  Anyway, if anyone has a spare R programmer kicking around and would 
like all my looper code, just ask...

Barry



More information about the R-help mailing list