Mads Jeppe Tarp-Johansen <[EMAIL PROTECTED]> writes:

> The programming language mosml comes with foldr that 'accumulates' a
> function f over a list [x1,x2,...,xn] with initial value b as follows
> 
> foldr f b [x1,x2,...,xn]  =  f(x1,...,f(xn-1,f(xn,b))...)
> 
> Observe that "list" should have same elements so in R terminology it would
> perhaps be appropriate to say that the accumulation takes place over a
> 'vector'.
> 
> I wonder if R comes with a similar function and in general a library or
> package with list (vector) operators. Or is such programming style not
> intended in R?

R does generally encourage abstraction and encapsulation. However
operations like foldr are not common in statistics, I'd say. We have
cumsum and cumprod, which are the same sort of thing, hard coded. It's
easy to implement in R, although possibly not efficiently. Something
like this should work (untested!):

foldr <- function(f, b, x) {
   if (!(n <- length(x))) stop("zero-length x not allowed")
   if (n == 1)
      f(b, x) 
   else
      foldr(f, f(x[n], b), x[-n])
}

or non-recursively (equally untested)

foldr <- function(f, b, x)
{
   if (!(n <- length(x))) stop("zero-length x not allowed")
   while (n) { 
     b <- f(b, x[n])
     n <- n - 1
   }
   b
}



-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - ([EMAIL PROTECTED])             FAX: (+45) 35327907

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to