From takahama at andrew.cmu.edu  Wed Mar 23 22:16:30 2005
From: takahama at andrew.cmu.edu (takahama@andrew.cmu.edu)
Date: Wed Mar 23 22:16:38 2005
Subject: [Rd] interp.surface() error (PR#7745)
Message-ID: <20050323211630.8F05FBB2C@slim.kubism.ku.dk>

R version: 2.001
OS: Windows XP SP2

When I use the interp.surface() function, on occasion I have encountered 
the following error message:

Error in interp.surface(a, loc) : subscript out of bounds

Since it is somewhat dependent on the data set, I cannot say exactly in 
which cases these occur, but I believe I have found the problem and a 
solution for it:

The scaling calculations in the code,
    lx <- ((nx - 1) * (loc[, 1] - xa))/xr + 1
    ly <- ((ny - 1) * (loc[, 2] - ya))/yr + 1
can lead to numerical error, so in the following lines
    lx1 <- ifelse(lx == nx, nx - 1, trunc(lx))
    ly1 <- ifelse(ly == ny, ny - 1, trunc(ly))
the equality statements which are the first arguments to the IF-ELSE 
statements return false when they are supposed to be true. I believe the 
remedy is to simply avoid absolute equalities, as in the following example 
(which has worked for my problem):
    lx1 <- ifelse(abs(lx - nx) < 1e-10, nx - 1, trunc(lx))
    ly1 <- ifelse(abs(ly - ny) < 1e-10, ny - 1, trunc(ly))

I hope this is an appropriate posting for an error report. Thank you very 
much for your hard work,

Satoshi
_____
Satoshi Takahama
Dept. of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
Phone: 412-268-7570


[Rd] interp.surface() error (PR#7745)
takahama@andrew.cmu.edu