[R-sig-Geo] nearest distance in matrix
Barry Rowlingson
B.Rowlingson at lancaster.ac.uk
Wed Jul 14 18:11:57 CEST 2004
Marius Gilbert wrote:
> Hello,
>
> I'm trying to use R to simulate biological invasions, and got stuck with
> the following:
>
> Is there a function that uses a matrix of occupied/empty values (1 or 0)
> as input, and producing an output matrix of the same size, with each cell
> containing the distance to the nearest occupied cell (1) of the input
> matrix ?
Try this, which uses an internal, undocumented Spatstat function
'exactPdt':
library(spatstat)
nmatdist <- function(aMat){
storage.mode(aMat) <- "logical"
win <- owin(xrange=c(1,ncol(aMat)),yrange=c(1,nrow(aMat)),mask=aMat)
m <- exactPdt(win)
return(m$d)
}
> For example, the input matrix:
>
> 0 1 1 0
> 0 0 1 0
> 0 0 0 0
> 0 0 0 0
>
> Would produce an output matrix like:
>
> 1 0 0 1
> 1.4 1 0 1
> 2.2 1.4 1 1.4
> 2.8 2.2 2.0 2.2
test:
> m1
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 1 0 0 0 0
[3,] 1 1 0 0 0
[4,] 0 0 0 0 0
> nmatdist(m1)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1.414214 2.236068 2.828427 3.605551
[2,] 0 1.000000 1.414214 2.236068 3.162278
[3,] 0 0.000000 1.000000 2.000000 3.000000
[4,] 1 1.000000 1.414214 2.236068 3.162278
looks about right!
Baz
More information about the R-sig-Geo
mailing list