[R] Reducing a list of functions by composition fails

Gabor Grothendieck ggrothendieck at gmail.com
Thu Aug 5 23:01:19 CEST 2010


On Thu, Aug 5, 2010 at 4:31 PM, Mog <mogunus at gmail.com> wrote:
> Hi All,
>
> I'd like to be able to specify the ordered composition of several
> functions. So I defined compose:
>
> compose <- function(f,g){
>  function(x){f(g(x))}
> }
>
> and some simple test functions:
>
> plus2 <- function(x){x+2}
> plus3 <- function(x){x+3}
> plus4 <- function(x){x+4}
>
>>  (compose(plus2,compose(plus3,plus4)))(3)
> [1] 12
>
> Works fine. But trying to reduce a list of functions by compose fails:
>
>> Reduce(compose,list(plus2,plus3,plus4),right=TRUE)(3)
> Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
>
> As far as I can tell, that reduction should be the same as my call
> above. What am I doing wrong?

Its due to lazy evaluation.  Insert this at the top of compose:

   force(f); force(g)



More information about the R-help mailing list