[R] approxfun returning value higher than I would expect

Duncan Murdoch murdoch.duncan at gmail.com
Wed Sep 15 22:05:46 CEST 2010


  On 15/09/2010 3:48 PM, stephen sefick wrote:
> Below is the code that I am using in a much larger function.  I would
> expect a bankfull measure at zero to be between 0.6 and 0.8 approxfun
> is returning 0.8136986.  I am sure that I am missing something.
>
> measure_bkf<- (structure(list(measurment_num = c(0, 0.2, 0.4, 0.6,
> 0.8, 1, 1.2,
> 1.4, 1.6, 1.8, 2, 2.2, 2.4, 2.6, 2.8, 3, 3.2, 3.4), bankfull_depths_m
> = c(-0.48,
> -0.48, -0.42, -0.26, 0.58, 0.48, 0.47, 0.54, 0.5, 0.52, 0.52,
> 0.56, 0.58, 0.61, 0.68, 0.62, 0.67, 0.66)), .Names = c("measurment_num",
> "bankfull_depths_m"), row.names = c("6124", "612", "613", "614",
> "615", "616", "617", "618", "619", "620", "621", "622", "623",
> "624", "625", "626", "627", "628"), class = "data.frame"))
>
>
> measure_bkf_not_zero<- subset(measure_bkf, measure_bkf$bankfull_depths_m!=0)
>
> bkf_min<- which.max(measure_bkf_not_zero[,"bankfull_depths_m"]<0)
>
> bkf_max<- which.max(measure_bkf_not_zero[,"bankfull_depths_m"])
>
> #bkf_min<- ifelse(length(bkf_min)>1, bkf_min[1], bkf_min)
> #bkf_max<- ifelse(length(bkf_max)>1, bkf_max[1], bkf_max)
>
> #s<- with(measure_bkf_not_zero, approx(measurment_num,
> bankfull_depths_m,
> xout=seq(measure_bkf_not_zero[bkf_min,"measurment_num"],
> measure_bkf_not_zero[bkf_max,"measurment_num"], length=2000)))
> #int_bkf<- with(s, x[which.min(y[y>0])])
>
> s<- with(measure_bkf_not_zero[bkf_min:bkf_max,],
> approxfun(bankfull_depths_m, measurment_num), ties=mean)
>
> int_bkf<- s(0)
>

It is easier to see the problem if you don't leave all the complications 
in the beginning.  Just define some variables and
show the interpolation on a plot:

x <- 
c(-0.48,-0.48,-0.42,-0.26,0.58,0.48,0.47,0.54,0.5,0.52,0.52,0.56,0.58,0.61,0.68)
y <- c(0,0.2,0.4,0.6,0.8,1,1.2,1.4,1.6,1.8,2,2.2,2.4,2.6,2.8)
plot(x, y)
s <- approxfun(x, y, ties=mean)
curve(s, add=TRUE)

On my system, this looks okay in 2.11.1, but not in R-patched or R-devel 
(soon to be 2.12.0).  It is fixed if the x values are ordered, but it's 
not supposed to need that.  I'll take a look.

Duncan Murdoch



More information about the R-help mailing list