# [R] How to eliminate this for loop ?

Nick Sabbe nick.sabbe at ugent.be
Tue Nov 9 12:18:00 CET 2010

```I doubt this to be true.
Try this in R:
> dmy<-rep(1,5)
> dmy[2:5]<-dmy[1:4]+1
This is equivalent to what you propose (even simpler), but it does not, as
OP seems to have wanted, fill dmy with 1,2,3,4,5, but, as I had expected,
with 1,2,2,2,2.

I would be interested in knowing what exactly the difference beween my
example above, and the one you suggest, is.

As others have suggested: another way is to use actual recursive calls, but
I seriously doubt these to be more efficient. You should probably only use
it if you really hate to type the word 'for' (-: Though I would also like to
see an example where they prove to be the better way to go (by any criteria,
but preferably speed or perhaps other resource usage)

Nick Sabbe
--
ping: nick.sabbe at ugent.be
wink: A1.056, Coupure Links 653, 9000 Gent
ring: 09/264.59.36

-- Do Not Disapprove

-----Original Message-----
From: David Winsemius [mailto:dwinsemius at comcast.net]
Sent: maandag 8 november 2010 15:04
To: Nick Sabbe
Cc: 'PLucas'; r-help at r-project.org
Subject: Re: [R] How to eliminate this for loop ?

On Nov 8, 2010, at 4:30 AM, Nick Sabbe wrote:

> Whenever you use a recursion (that cannot be expressed otherwise), you
> always need a (for) loop.

Not necessarily true ... assuming "a" is of length "n":

a[2:n] <- a[1:(n-1))]*b + cc[1:(n-1)]
# might work if b and n were numeric vectors of length 1 and cc had
length >= n. (Never use "c" as a vector name.)
# it won't work if there are no values for the nth element at the
beginning and you are building up a element by element.

And you always need to use operations that appropriate to the object
type. So if "a" really is a list, this will always fail since
arithmetic does not work on list elements. If on the other hand, the
OP were incorrect in calling this a list and "a" were a numeric
vector, there might be a chance of success if the rules of indexing
were adhered to. The devil is in the details and the OP has not
supplied enough code to tell what might happen.

--
David.

> Apply and the like do not allow to use the intermediary results
> (i.e. a[i-1]
> to calculate a[i]).
>
> So: no, it cannot be avoided in your case, I guess.
>
>
> Nick Sabbe
> --
> ping: nick.sabbe at ugent.be
> wink: A1.056, Coupure Links 653, 9000 Gent
> ring: 09/264.59.36
>
> -- Do Not Disapprove
>
>
>
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org
> ] On
> Behalf Of PLucas
> Sent: maandag 8 november 2010 10:26
> To: r-help at r-project.org
> Subject: [R] How to eliminate this for loop ?
>
>
> Hi, I would like to create a list recursively and eliminate my for
> loop :
>
> a<-c()
> a[1] <- 1; # initial value
> for(i in 2:N) {
> 	a[i]<-a[i-1]*b - c[i-1] # b is a value, c is another vector
> }
>
>
> Is it possible ?
>
> Thanks
> --
> View this message in context:
>
http://r.789695.n4.nabble.com/How-to-eliminate-this-for-loop-tp3031667p30316
> 67.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
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