Rev 52927 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/mapply.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{mapply}\alias{mapply}\alias{Vectorize}\title{Apply a Function to Multiple List or Vector Arguments}\description{\code{mapply} is a multivariate version of \code{\link{sapply}}.\code{mapply} applies \code{FUN} to the first elements of each \dotsargument, the second elements, the third elements, and so on.Arguments are recycled if necessary.\code{Vectorize} returns a new function that acts as if \code{mapply}was called.}\usage{mapply(FUN, \dots, MoreArgs = NULL, SIMPLIFY = TRUE,USE.NAMES = TRUE)Vectorize(FUN, vectorize.args = arg.names, SIMPLIFY = TRUE,USE.NAMES = TRUE)}\arguments{\item{FUN}{function to apply, found via \code{\link{match.fun}}.}\item{\dots}{arguments to vectorize over (list or vector).}\item{MoreArgs}{a list of other arguments to \code{FUN}.}\item{SIMPLIFY}{logical; attempt to reduce the result to a vector or matrix?}\item{USE.NAMES}{logical; use names if the first \dots argument hasnames, or if it is a character vector, use that character vector asthe names.}\item{vectorize.args}{a character vector of arguments which should bevectorized. Defaults to all arguments to \code{FUN}.}}\value{\code{mapply} returns a list, vector, or matrix.\code{Vectorize} returns a function with the same arguments as \code{FUN},but wrapping a call to \code{mapply}.}\details{The arguments named in the \code{vectorize.args} argument to\code{Vectorize} correspond to the arguments passed in the \code{...}list to \code{mapply}. However, only those that are actually passedwill be vectorized; default values will not. See the example below.\code{Vectorize} cannot be used with primitive functions as they haveno formal list.}\seealso{\code{\link{sapply}}, after which \code{mapply()} is built, notably onsimplification; \code{\link{outer}}}\examples{require(graphics)mapply(rep, 1:4, 4:1)mapply(rep, times=1:4, x=4:1)mapply(rep, times=1:4, MoreArgs=list(x=42))# Repeat the same using Vectorize: use rep.int as rep is primitivevrep <- Vectorize(rep.int)vrep(1:4, 4:1)vrep(times=1:4, x=4:1)vrep <- Vectorize(rep.int, "times")vrep(times=1:4, x=42)mapply(function(x,y) seq_len(x) + y,c(a= 1, b=2, c= 3), # names from firstc(A=10, B=0, C=-10))word <- function(C,k) paste(rep.int(C,k), collapse='')utils::str(mapply(word, LETTERS[1:6], 6:1, SIMPLIFY = FALSE))f <- function(x=1:3, y) c(x,y)vf <- Vectorize(f, SIMPLIFY = FALSE)f(1:3,1:3)vf(1:3,1:3)vf(y=1:3) # Only vectorizes y, not x# Nonlinear regression contour plot, based on nls() exampleSS <- function(Vm, K, resp, conc) {pred <- (Vm * conc)/(K + conc)sum((resp - pred)^2 / pred)}vSS <- Vectorize(SS, c("Vm", "K"))Treated <- subset(Puromycin, state == "treated")Vm <- seq(140, 310, len=50)K <- seq(0, 0.15, len=40)SSvals <- outer(Vm, K, vSS, Treated$rate, Treated$conc)contour(Vm, K, SSvals, levels=(1:10)^2, xlab="Vm", ylab="K")}\keyword{manip}\keyword{utilities}