[R] fold right - recursive list (vector) operators

John Fox jfox at mcmaster.ca
Wed Nov 3 23:18:48 CET 2004


Dear MJ,

If I follow correctly what you want to do, then the following should
work:

foldr <- function(f, x){
      if (length(x) > 1) f(c(x[1], Recall(f, x[-1])))
      else f(x)
      }

For example,

> sum(c(4, sum(c(2, sum(6)))))
[1] 12
> foldr(sum, c(4,2,6))
[1] 12

I hope this helps,
 John

On Wed, 3 Nov 2004 22:59:11 +0100 (CET)
 Mads Jeppe Tarp-Johansen <s02mjtj at math.ku.dk> wrote:
> 
> 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?
> 
> Regards MJ
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html

--------------------------------
John Fox
Department of Sociology
McMaster University
Hamilton, Ontario, Canada
http://socserv.mcmaster.ca/jfox/




More information about the R-help mailing list