Nearest neighbour distances

Computes the distance from each point to its nearest neighbour in a point pattern. Alternatively computes the distance to the second nearest neighbour, or third nearest, etc.

spatial, math
nndist(X, ..., method="C")
  ## S3 method for class 'ppp':
nndist(X, \dots, k=1, method="C")
  ## S3 method for class 'default':
nndist(X, Y=NULL, \dots, k=1, method="C")
Arguments specifying the locations of a set of points. For nndist.ppp, the argument X should be a point pattern (object of class "ppp"). For nndist.default, typically X and <
Ignored by nndist.ppp and nndist.default.
Integer. The algorithm will compute the distance to the kth nearest neighbour.
String specifying which method of calculation to use. Values are "C" and "interpreted".

This function computes the Euclidean distance from each point in a point pattern to its nearest neighbour (the nearest other point of the pattern). If k is specified, it computes the distance to the kth nearest neighbour.

The function nndist is generic, with a method for point patterns (objects of class "ppp"), and a default method for coordinate vectors. There is also a method for line segment patterns, nndist.psp.

The method for point patterns expects a single point pattern argument X and returns the vector of its nearest neighbour distances.

The default method expects that X and Y will determine the coordinates of a set of points. Typically X and Y would be numeric vectors of equal length. Alternatively Y may be omitted and X may be a list with two components named x and y, or a matrix or data frame with two columns. The argument method is not normally used. It is retained only for checking the validity of the software. If method = "interpreted" then the distances are computed using interpreted R code only. If method="C" (the default) then C code is used. The C code is faster by two to three orders of magnitude and uses much less memory. If there is only one point (if x has length 1), then a nearest neighbour distance of Inf is returned. If there are no points (if x has length zero) a numeric vector of length zero is returned.

To identify which point is the nearest neighbour of a given point, use nnwhich.

To use the nearest neighbour distances for statistical inference, it is often advisable to use the edge-corrected empirical distribution, computed by Gest.

To find the nearest neighbour distances from one point pattern to another point pattern, use nncross.


  • Numeric vector of the (kth) nearest neighbour distances for each point.


An infinite value is returned if there is only one point in the point pattern (or in general if there are fewer than k+1 points).

See Also

nndist.psp, pairdist, Gest, nnwhich, nncross.

  • nndist
  • nndist.ppp
  • nndist.default
   d <- nndist(cells)
   d2 <- nndist(cells, k=2)

   x <- runif(100)
   y <- runif(100)
   d <- nndist(x, y)

   # Stienen diagram
   plot(cells %mark% (nndist(cells)/2), markscale=1)
Documentation reproduced from package spatstat, version 1.17-0, License: GPL (>= 2)

Community examples

Looks like there are no examples yet.