1. The for loop is probably as or more efficient than recursion, especially for large n (comments/corrections on this claim from cogniscenti are welcome);
2. One can **Always** express a for loop recursively -- that is the nature of computer languages (comments/corrections again welcome). 3. Here is code that does it: Note that I have changed argument name "c" to "const" to avoid confusion with the c() function f <- function(n,b,const) { if(length(const)< n-1)stop("const is too short") g <- function(i){ if(i==1) 1 else b*g(i-1)+ const[i-1] } g(n) } As David intimated, this produces a vector, not a list. Cast with as.list if that's what you want. Cheers, Bert On Mon, Nov 8, 2010 at 6:03 AM, David Winsemius <dwinsem...@comcast.net> wrote: > > 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.sa...@ugent.be >> link: http://biomath.ugent.be >> wink: A1.056, Coupure Links 653, 9000 Gent >> ring: 09/264.59.36 >> >> -- Do Not Disapprove >> >> >> >> -----Original Message----- >> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] >> On >> Behalf Of PLucas >> Sent: maandag 8 november 2010 10:26 >> To: r-help@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@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@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. > > David Winsemius, MD > West Hartford, CT > > ______________________________________________ > R-help@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. > -- Bert Gunter Genentech Nonclinical Biostatistics 467-7374 http://devo.gene.com/groups/devo/depts/ncb/home.shtml ______________________________________________ R-help@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.