[R-sig-Geo] nearest neighbor 3d point pattern

Adrian Baddeley adrian.baddeley at uwa.edu.au
Fri Jun 28 02:45:53 CEST 2013


Further to Rolf's comment:

The next release of spatstat (1.32-0) will include new methods nncross.pp3 and nncross.ppx
for this purpose.

(spatstat already contains the C code routines for nearest neighbours in arbitrary dimensions,
so it is only necessary to write the R interface.)

Adrian

Prof Adrian Baddeley FAA
University of Western Australia  /and/ CSIRO Mathematics, Informatics & Statistics
Mail: <cet.uwa.edu.au>             Skype: adrian.baddeley
________________________________________
From: Rolf Turner [r.turner at auckland.ac.nz]
Sent: Friday, 28 June 2013 7:34 AM
To: Carsten Neumann
Cc: r-sig-geo at r-project.org; Adrian Baddeley
Subject: Re: [R-sig-Geo] nearest neighbor 3d point pattern

On 27/06/13 23:40, Carsten Neumann wrote:
> Dear list members,
>
> after searching R mailing lists, I wonder if there is a R function that
> can find the nearest neighbor/or just euclidean distance of points in
> one 3D coordinate system to points in another 3D coordinate system. The
> function nncross {spatstat} can only deal with 2D point pattern. Any
> idea or experiences with such procedures?
>
> ######################Test Data############################
> point1<-array(c(seq(0,1,0.1),seq(0,1,0.1),seq(0,1,0.1)),dim=c(11,11,11))
> point2<-array(c(0.8,0.3,0.5),dim=c(1,1,1))
> #########################################################
> question: where is point2 in point1?

You are correct in that nncross() has not (yet) been extended to three
dimensional point patterns.  However a workaround can be found by
using crossdist.pp3().

E.g.:

     set.seed(42)
     X     <- ppx(data.frame(x=rnorm(20),y=rnorm(20),z=rnorm(20)))
     Y      <- ppx(data.frame(x=0,y=0,z=0))
     M     <- crossdist(Y,X)
     min(M)
     which.min(M)

This will tell you that the nearest point in X to c(0,0,0) is point
number 15
and the distance from c(0,0,0) to this point is 0.5299162.

I'm afraid I could not comprehend your example.  The object point1 is
a 3-dimensional array (11 x 11 x 11).  How is this to be interpreted as
a 3-dimensional *point pattern*?  And point2 is a single number --- 0.8,
and not actually a point in 3-space.

Furthermore what does the question "where is point2 in point1?" mean?
I cannot parse this question.

Perhaps (quite possibly) I am just being stupid.  If so, please
enlighten me.

     cheers,

         Rolf Turner



More information about the R-sig-Geo mailing list