| % File src/library/stats/man/approxfun.Rd |
| % Part of the R package, https://www.R-project.org |
| % Copyright 1995-2019 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 be |
| interpolated. Alternatively a single plotting structure can be |
| specified: see \code{\link{xy.coords}}.} |
| \item{xout}{an optional set of numeric values specifying where |
| interpolation is to take place.} |
| \item{method}{specifies the interpolation method to be used. Choices |
| are \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 are |
| less than \code{min(x)}. The default is defined by the value |
| of \code{rule} given below.} |
| \item{yright}{the value to be returned when input \code{x} values are |
| greater than \code{max(x)}. The default is defined by the value |
| of \code{rule} given below.} |
| \item{rule}{an integer (of length 1 or 2) describing how interpolation |
| is 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 such |
| points and if it is \code{2}, the value at the closest data extreme |
| is used. Use, e.g., \code{rule = 2:1}, if the left and right side |
| extrapolation should differ.} |
| \item{f}{for \code{method = "constant"} a number between 0 and 1 |
| inclusive, indicating a compromise between left- and |
| right-continuous step functions. If \code{y0} and \code{y1} are |
| the 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 is |
| right-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. The string |
| \code{"ordered"} or a function (or the name of a function) |
| taking a single vector argument and returning a single number |
| or a \code{\link{list}} of both, e.g., |
| \code{list("ordered", mean)}, see \sQuote{Details}.} |
| } |
| \details{ |
| The inputs can contain missing values which are deleted, so at least |
| two complete \code{(x, y)} pairs are required (for \code{method = |
| "linear"}, one otherwise). If there are duplicated (tied) \code{x} |
| values and \code{ties} contains a function it is applied to the \code{y} |
| values for each distinct \code{x} value to produce \code{(x,y)} pairs |
| with unique \code{x}. |
| 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 (and unique) and ties are \emph{not} checked but kept if present. |
| This is the fastest option for large \code{length(x)}. |
| |
| If \code{ties} is a \code{\link{list}} of length two, \code{ties[[2]]} |
| must be a function to be applied to ties, see above, but if |
| \code{ties[[1]]} is identical to \code{"ordered"}, the \code{x} values |
| are assumed to be sorted and are only checked for ties. Consequently, |
| \code{ties = list("ordered", mean)} will be slightly more efficient than |
| the default \code{ties = mean} in such a case. |
| |
| The first \code{y} value will be used for interpolation to the left and the last |
| one 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 data |
| points according to the \code{method} (and \code{rule}) desired. |
| |
| The function \code{approxfun} returns a function performing (linear or |
| constant) interpolation of the given data points. For a given set of |
| \code{x} values, this function will return the corresponding |
| interpolated values. It uses data stored in its environment when it |
| was created, the details of which are subject to change. |
| } |
| \section{Warning}{ |
| The value returned by \code{approxfun} contains references to the code |
| in the current version of \R: it is not intended to be saved and |
| loaded into a different \R session. This is safer for \R >= 3.0.0. |
| } |
| \seealso{ |
| \code{\link{spline}} and \code{\link{splinefun}} for spline |
| interpolation. |
| } |
| \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:10 |
| y <- 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")) # TRUE |
| curve(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) |
| (amy <- approx(x, y, xout = x)$y) # warning, can be avoided by specifying 'ties=': |
| op <- options(warn=2) # warnings would be error |
| stopifnot(identical(amy, approx(x, y, xout = x, ties=mean)$y)) |
| options(op) # revert |
| (ay <- approx(x, y, xout = x, ties = "ordered")$y) |
| stopifnot(amy == c(1.5,1.5, 3, 5,5,5, 4.5,4.5, 2,2,2), |
| ay == c(2, 2, 3, 6,6,6, 4, 4, 1,1,1)) |
| approx(x, y, xout = x, ties = min)$y |
| approx(x, y, xout = x, ties = max)$y |
| |
| %%-- MM has nice utility plotting -- do in demo ? |
| } |
| \keyword{arith} |
| \keyword{dplot} |