Rev 68948 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/stats/man/approxfun.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2014 R Core Team% Distributed under GPL 2 or later\name{approxfun}\alias{approx}\alias{approxfun}\title{Interpolation Functions}\description{Return a list of points which linearly interpolate given data points,or a function performing the linear (or constant) interpolation.}\usage{approx (x, y = NULL, xout, method = "linear", n = 50,yleft, yright, rule = 1, f = 0, ties = mean)approxfun(x, y = NULL, method = "linear",yleft, yright, rule = 1, f = 0, ties = mean)}\arguments{\item{x, y}{numeric vectors giving the coordinates of the points to beinterpolated. Alternatively a single plotting structure can bespecified: see \code{\link{xy.coords}}.}\item{xout}{an optional set of numeric values specifying whereinterpolation is to take place.}\item{method}{specifies the interpolation method to be used. Choicesare \code{"linear"} or \code{"constant"}.}\item{n}{If \code{xout} is not specified, interpolation takes place at\code{n} equally spaced points spanning the interval [\code{min(x)},\code{max(x)}].}\item{yleft}{the value to be returned when input \code{x} values areless than \code{min(x)}. The default is defined by the valueof \code{rule} given below.}\item{yright}{the value to be returned when input \code{x} values aregreater than \code{max(x)}. The default is defined by the valueof \code{rule} given below.}\item{rule}{an integer (of length 1 or 2) describing how interpolationis to take place outside the interval [\code{min(x)}, \code{max(x)}].If \code{rule} is \code{1} then \code{NA}s are returned for suchpoints and if it is \code{2}, the value at the closest data extremeis used. Use, e.g., \code{rule = 2:1}, if the left and right sideextrapolation should differ.}\item{f}{for \code{method = "constant"} a number between 0 and 1inclusive, indicating a compromise between left- andright-continuous step functions. If \code{y0} and \code{y1} arethe values to the left and right of the point then the value is\code{y0} if \code{f == 0}, \code{y1} if \code{f == 1}, and\code{ y0*(1-f)+y1*f} for intermediate values. In this way the result isright-continuous for \code{f == 0} and left-continuous for \code{f== 1}, even for non-finite \code{y} values.}\item{ties}{Handling of tied \code{x} values. Either a functionwith a single vector argument returning a single number result orthe string \code{"ordered"}.}}\details{The inputs can contain missing values which are deleted, so at leasttwo complete \code{(x, y)} pairs are required (for \code{method ="linear"}, one otherwise). If there are duplicated (tied) \code{x}values and \code{ties} is a function it is applied to the \code{y}values for each distinct \code{x} value.Useful functions in this context include \code{\link{mean}},\code{\link{min}}, and \code{\link{max}}. If \code{ties = "ordered"}the \code{x} values are assumed to be already ordered. The first\code{y} value will be used for interpolation to the left and the lastone for interpolation to the right.}\value{\code{approx} returns a list with components \code{x} and \code{y},containing \code{n} coordinates which interpolate the given datapoints according to the \code{method} (and \code{rule}) desired.The function \code{approxfun} returns a function performing (linear orconstant) interpolation of the given data points. For a given set of\code{x} values, this function will return the correspondinginterpolated values. It uses data stored in its environment when itwas created, the details of which are subject to change.}\section{Warning}{The value returned by \code{approxfun} contains references to the codein the current version of \R: it is not intended to be saved andloaded into a different \R session. This is safer for \R >= 3.0.0.}\seealso{\code{\link{spline}} and \code{\link{splinefun}} for splineinterpolation.}\references{Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole.}\examples{require(graphics)x <- 1:10y <- rnorm(10)par(mfrow = c(2,1))plot(x, y, main = "approx(.) and approxfun(.)")points(approx(x, y), col = 2, pch = "*")points(approx(x, y, method = "constant"), col = 4, pch = "*")f <- approxfun(x, y)curve(f(x), 0, 11, col = "green2")points(x, y)is.function(fc <- approxfun(x, y, method = "const")) # TRUEcurve(fc(x), 0, 10, col = "darkblue", add = TRUE)## different extrapolation on left and right side :plot(approxfun(x, y, rule = 2:1), 0, 11,col = "tomato", add = TRUE, lty = 3, lwd = 2)## Show treatment of 'ties' :x <- c(2,2:4,4,4,5,5,7,7,7)y <- c(1:6, 5:4, 3:1)approx(x, y, xout = x)$y # warning(ay <- approx(x, y, xout = x, ties = "ordered")$y)stopifnot(ay == c(2,2,3,6,6,6,4,4,1,1,1))approx(x, y, xout = x, ties = min)$yapprox(x, y, xout = x, ties = max)$y%%-- MM has nice utility plotting -- do in demo ?}\keyword{arith}\keyword{dplot}