Rev 46283 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/lapply.Rd% Part of the R package, http://www.R-project.org% Copyright 1995-2007 R Core Development Team% Distributed under GPL 2 or later\name{lapply}\alias{lapply}\alias{sapply}\alias{replicate}\title{Apply a Function over a List or Vector}\usage{lapply(X, FUN, \dots)sapply(X, FUN, \dots, simplify = TRUE, USE.NAMES = TRUE)replicate(n, expr, simplify = TRUE)}\arguments{\item{X}{a vector (atomic or list) or an expressions vector. Otherobjects (including classed objects) will be coerced by\code{\link{as.list}}.}\item{FUN}{the function to be applied to each element of \code{X}:see \sQuote{Details}. In the case of functions like\code{+}, \code{\%*\%}, etc.,the function name must be backquoted or quoted.}\item{\dots}{optional arguments to \code{FUN}.}\item{simplify}{logical; should the result be simplified to a vectoror matrix if possible?}\item{USE.NAMES}{logical; if \code{TRUE} and if \code{X} is character,use \code{X} as \code{\link{names}} for the result unless it had namesalready.}\item{n}{number of replications.}\item{expr}{expression (language object, usually a call)to evaluate repeatedly.}}\description{\code{lapply} returns a list of the same length as \code{X}, eachelement of which is the result of applying \code{FUN} to thecorresponding element of \code{X}.\code{sapply} is a user-friendly version of \code{lapply}by default returning a vector or matrix if appropriate.\code{replicate} is a wrapper for the common use of \code{sapply} forrepeated evaluation of an expression (which will usually involverandom number generation).}\details{\code{FUN} is found by a call to \code{\link{match.fun}} and typicallyis specified as a function or a symbol (e.g. a backquoted name) or acharacter string specifying a function to be searched for from theenvironment of the call to \code{lapply}.Function \code{FUN} must be able to accept as input any of theelements of \code{X}. If the latter is an atomic vector, \code{FUN}will always be passed a length-one vector of the same type as \code{X}.Simplification in \code{sapply} is only attempted if \code{X} haslength greater than zero and if the return values from all elementsof \code{X} are all of the same (positive) length. If the commonlength is one the result is a vector, and if greater than one is amatrix with a column corresponding to each element of \code{X}.The mode of the simplified answer is chosen to accommodate the modes ofall the values returned by the calls to \code{FUN}: see \code{\link{unlist}}.if \code{X} has length 0, the return value of \code{sapply} is alwaysa 0-length list.Users of S4 classes should pass a list to \code{lapply}: the internalcoercion is done by the system \code{as.list} in the base namespaceand not one defined by a user (e.g. by setting S4 methods on thesystem function).}\note{\code{sapply(*, simplify = FALSE, USE.NAMES = FALSE)} isequivalent to \code{lapply(*)}.For historical reasons, the calls created by \code{lapply} areunevaluated, and code has been written (e.g. \code{bquote}) thatrelies on this. This means that the recorded call is always of theform \code{FUN(X[[0L]], ...)}, with \code{0L} replaced by the currentinteger index. This not normally a problem, but it can be if\code{FUN} uses \code{\link{sys.call}} or \code{\link{match.call}} orif it is a primitive function that makes use of the call. This meansthat it is often safer to call primitive functions with a wrapper, sothat e.g. \code{lapply(ll, function(x) is.numeric(x))} is required in\R 2.7.1 to ensure that method dispatch for \code{is.numeric} occurscorrectly.If \code{expr} is a function call, be aware of assumptions about whereit is evaluated, and in particular what \code{\dots} might refer to.You can pass additional named arguments to a function call asadditional named arguments to \code{replicate}: see \sQuote{Examples}.}\references{Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth \& Brooks/Cole.}\seealso{\code{\link{apply}}, \code{\link{tapply}},\code{\link{mapply}} for applying a function to \bold{m}ultiplearguments, and \code{\link{rapply}} for a \bold{r}ecursive version of\code{lapply()}, \code{\link{eapply}} for applying a function to eachentry in an \code{\link{environment}}.}\examples{require(stats); require(graphics)x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE,FALSE,FALSE,TRUE))# compute the list mean for each list elementlapply(x,mean)# median and quartiles for each list elementlapply(x, quantile, probs = 1:3/4)sapply(x, quantile)i39 <- sapply(3:9, seq) # list of vectorssapply(i39, fivenum)hist(replicate(100, mean(rexp(10))))## use of replicate() with parameters:% taken from PR#8472foo <- function(x=1, y=2) c(x,y)# does not work: bar <- function(n, ...) replicate(n, foo(...))bar <- function(n, x) replicate(n, foo(x=x))bar(5, x=3)}\keyword{iteration}\keyword{list}