approxfun
Interpolation Functions
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
- x, y
- numeric vectors giving the coordinates of the points to be
interpolated. Alternatively a single plotting structure can be
specified: see
xy.coords
. - xout
- an optional set of numeric values specifying where interpolation is to take place.
- method
- specifies the interpolation method to be used. Choices
are
"linear"
or"constant"
. - n
- If
xout
is not specified, interpolation takes place atn
equally spaced points spanning the interval [min(x)
,max(x)
]. - yleft
- the value to be returned when input
x
values are less thanmin(x)
. The default is defined by the value ofrule
given below. - yright
- the value to be returned when input
x
values are greater thanmax(x)
. The default is defined by the value ofrule
given below. - rule
- an integer (of length 1 or 2) describing how interpolation
is to take place outside the interval [
min(x)
,max(x)
]. Ifrule
is1
thenNA
s are returned for such points and if it is2
, the value at the closest data extreme is used. Use, e.g.,rule = 2:1
, if the left and right side extrapolation should differ. - f
- for
method = "constant"
a number between 0 and 1 inclusive, indicating a compromise between left- and right-continuous step functions. Ify0
andy1
are the values to the left and right of the point then the value isy0
iff == 0
,y1
iff == 1
, andy0*(1-f)+y1*f
for intermediate values. In this way the result is right-continuous forf == 0
and left-continuous forf == 1
, even for non-finitey
values. - ties
- Handling of tied
x
values. Either a function with a single vector argument returning a single number result or the string"ordered"
.
Details
The inputs can contain missing values which are deleted, so at least
two complete (x, y)
pairs are required (for method =
"linear"
, one otherwise). If there are duplicated (tied) x
values and ties
is a function it is applied to the y
values for each distinct x
value.
Useful functions in this context include mean
,
min
, and max
. If ties = "ordered"
the x
values are assumed to be already ordered. The first
y
value will be used for interpolation to the left and the last
one for interpolation to the right.
Value
approx
returns a list with components x
and y
,
containing n
coordinates which interpolate the given data
points according to the method
(and rule
) desired.The function approxfun
returns a function performing (linear or
constant) interpolation of the given data points. For a given set of
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.
Warning
The value returned by 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.
References
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
See Also
Examples
library(stats)
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)
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)$y
approx(x, y, xout = x, ties = max)$y