當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R approxfun 插值函數


R語言 approxfun 位於 stats 包(package)。

說明

返回對給定數據點進行線性插值的點列表,或執行線性(或常量)插值的函數。

用法

approx   (x, y = NULL, xout, method = "linear", n = 50,
          yleft, yright, rule = 1, f = 0, ties = mean, na.rm = TRUE)

approxfun(x, y = NULL,       method = "linear",
          yleft, yright, rule = 1, f = 0, ties = mean, na.rm = TRUE)

參數

x, y

給出要插值點的坐標的數值向量。或者,可以指定單個繪圖結構:請參閱xy.coords

xout

一組可選的數值,指定插值發生的位置。

method

指定要使用的插值方法。選項為 "linear""constant"

n

如果未指定 xout,則在跨越區間 [ min(x)max(x) ] 的 n 等距點處進行插值。

yleft

當輸入 x 值小於 min(x) 時要返回的值。默認值由下麵給出的rule 的值定義。

yright

當輸入 x 值大於 max(x) 時要返回的值。默認值由下麵給出的rule 的值定義。

rule

一個整數(長度為 1 或 2),說明如何在區間 [ min(x)max(x) ] 之外進行插值。如果 rule1 則為這些點返回 NA ,如果是 2 ,則使用最接近數據極值的值。如果左側和右側外推應該不同,請使用例如 rule = 2:1

f

對於 method = "constant" 來說,是 0 到 1 之間的數字(含 0 和 1),表示左階和 right-continuous 階躍函數之間的折衷。如果 y0y1 是該點左側和右側的值,則該值為 y0(如果 f == 0 )、y1(如果 f == 1 )和 y0*(1-f)+y1*f(如果為中間值)。這樣,結果是 f == 0 的 right-continuous 和 f == 1 的 left-continuous,即使對於非有限的 y 值也是如此。

ties

處理綁定的 x 值。字符串 "ordered" 或采用單個向量參數並返回單個數字或兩者的 list 的函數(或函數名稱),例如 list("ordered", mean) ,請參閱“詳細信息”。

na.rm

邏輯指定應如何處理缺失值(NA's)。設置 na.rm=FALSE 會將 y 中的 NA 傳播到插值,這也取決於 rule 集。請注意,在這種情況下,x 中的 NA 無效,另請參閱示例。

細節

輸入可以包含被刪除的缺失值(如果 na.rm 為 true,即默認情況下),因此至少需要兩個完整的 (x, y) 對(對於 method = "linear" ,否則一對)。如果存在重複(捆綁)的 x 值,並且 ties 包含一個函數,則該函數將應用於每個不同的 x 值的 y 值,以生成具有唯一 x(x,y) 對。此上下文中有用的函數包括 meanminmax

如果 ties = "ordered" 則假定 x 值已經排序(並且是唯一的),並且不檢查關係,但如果存在關係則保留。這是大型 length(x) 最快的選項。

如果 ties 是長度為 2 的 list,則 ties[[2]] 必須是應用於關係的函數,請參見上文,但如果 ties[[1]]"ordered" 相同,則假定 x 值是已排序並且僅檢查平局。因此,在這種情況下,ties = list("ordered", mean) 將比默認的 ties = mean 稍微高效一些。

第一個 y 值將用於向左插值,最後一個值將用於向右插值。

approx 返回一個包含組件 xy 的列表,其中包含 n 坐標,該坐標根據所需的 method (和 rule )插入給定的數據點。

函數 approxfun 返回一個對給定數據點執行(線性或常數)插值的函數。對於給定的一組x 值,此函數將返回相應的插值。它使用創建時存儲在其環境中的數據,其詳細信息可能會發生變化。

警告

返回的值approxfun包含對當前版本中代碼的引用R:它不打算保存並加載到不同的R會議。這對於更安全R>= 3.0.0。

例子

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)

### Treatment of 'NA's -- are kept if  na.rm=FALSE :

xn <- 1:4
yn <- c(1,NA,3:4)
xout <- (1:9)/2
## Default behavior (na.rm = TRUE): NA's omitted; extrapolation gives NA
data.frame(approx(xn,yn, xout))
data.frame(approx(xn,yn, xout, rule = 2))# -> *constant* extrapolation
## New (2019-2020)  na.rm = FALSE: NA's are "kept"
data.frame(approx(xn,yn, xout, na.rm=FALSE, rule = 2))
data.frame(approx(xn,yn, xout, na.rm=FALSE, rule = 2, method="constant"))

## NA's in x[] are not allowed:
stopifnot(inherits( try( approx(yn,yn, na.rm=FALSE) ), "try-error"))

## Give a nice overview of all possibilities  rule * method * na.rm :
##             -----------------------------  ====   ======   =====
## extrapolations "N":= NA;   "C":= Constant :
rules <- list(N=1, C=2, NC=1:2, CN=2:1)
methods <- c("constant","linear")
ry <- sapply(rules, function(R) {
       sapply(methods, function(M)
        sapply(setNames(,c(TRUE,FALSE)), function(na.)
                 approx(xn, yn, xout=xout, method=M, rule=R, na.rm=na.)$y),
        simplify="array")
   }, simplify="array")
names(dimnames(ry)) <- c("x = ", "na.rm", "method", "rule")
dimnames(ry)[[1]] <- format(xout)
ftable(aperm(ry, 4:1)) # --> (4 * 2 * 2) x length(xout)  =  16 x 9 matrix


## 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))
(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
options(op) # revert 'warn'ing level

參考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

splinesplinefun 用於樣條插值。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Interpolation Functions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。