[R] Elementary sapply question

Liaw, Andy andy_liaw at merck.com
Mon Jun 21 21:16:56 CEST 2004


If you have something like

lapply(x, f, ...)

What lapply() does (which is the same as what sapply() does, except sapply()
tries to `simplify' the result) is roughly:

result <- vector(mode="list", length=length(x))
for (i in seq(along(x)) {
    result[[i]] <- f(x[i], ...)
}

I.e., it takes the first argument of lapply() and assume the function
supplied as the second argument is to be applied to the components of the
first argument one by one.  Another thing you seem not to realize or
remember is that in R, arguments to functions are matched by positions, if
not named.

Compare the output of:

lapply(5, function(x, y) x*x + y*y, 1:3)
lapply(1:3, function(x, y) x*x + y*y, 5)

and change lapply() to sapply() and you'll probably see the light...

HTH,
Andy

> From: Ajay Shah [mailto:ajayshah at mayin.org] 
> 
> I had asked:
>   > > My problem is this. Suppose I have:
>   > >      pythagorean <- function(x, y) {
>   > >        return(x*x + y*y)
>   > >      }
>   > > 
>   > > then how do I utilise sapply to replace
>   > >      fixed.x = 3
>   > >      y.values = c(3,4,5)
>   > >      answers=numeric(3)
>   > >      for (i in 1:3) {
>   > >          answers[i] = pythagorean(fixed.x, y.values[i])
>   > >      }
> 
> On Mon, Jun 21, 2004 at 02:49:48PM -0400, Liaw, Andy wrote:
> > At least two ways:
> > 
> > 1. Use extra argument in the function being sapply()'ed; e.g.,
> > 
> > > f <- function(x, y) x*x + y*y
> > > x <- 3:5
> > > sapply(x, f, 3)
> > [1] 18 25 34
> > 
> > [See the "..." argument in ?sapply.]
> 
> I am aware of the "..." in sapply(). I am unable to understand how
> sapply will know where to utilise the x[i] values: as the 1st arg or
> the 2nd arg for f(x, y)?
> 
> That is, when I say:
> 
>      sapply(x, f, 3)
> 
> how does sapply know that I mean:
> 
>     for (i in 3:5) {
>         f(i, 3)
>     }
> 
> and not
> 
>     for (i in 3:5) {
>         f(3, i)
>     }
> 
> How would we force sapply to use one or the other interpretation?
> 
> Thanks,
> 
>         -ans.
> 
> -- 
> Ajay Shah                                                   Consultant
> ajayshah at mayin.org                      Department of Economic Affairs
> http://www.mayin.org/ajayshah           Ministry of Finance, New Delhi
> 
>




More information about the R-help mailing list