[R] Recall() and sapply()

Thomas Lumley tlumley at u.washington.edu
Wed Mar 30 18:10:17 CEST 2005


On Wed, 30 Mar 2005, Robin Hankin wrote:

> Hi.
>
> I'm having difficulty following the advice given in help(Recall).  Consider 
> the two
> following toy functions:
>
>
> f1 <- function(n){
>  if(length(n)>1){return(sapply(n,f1))}
>  matrix(n,n,n)
> }
>
> f2 <- function(n){
>  if(length(n)>1){return(sapply(n,Recall))}
>  matrix(n,n,n)
> }
>
>
> f1() works as desired (that is, f(1:3), say, gives me a three element list 
> whose i-th element
> is an i-by-i matrix whose elements are all i).
>
> But f2() doesn't.
>
> How do I modify either function to use Recall()?  What exactly is Recall() 
> calling here?
>

You can't use Recall here. I thought this was explicitly documented, but 
it turns out that it isn't, an omission I will fix.


You don't need Recall, because R can easily have recursive functions 
without it (unlike S)
- as you show in f1, the function can call itself
- the problem with f1 is that it stops working if you change the name, but
   ?local shows how to get around this. This is probably the best way to
   implement recursion.
- You can even implement Y, the "appplicative-order fixed point operator"
   to create anonymous recursive functions a la lambda calculus.


 	-thomas




More information about the R-help mailing list