# nncross.lpp

##### Nearest Neighbours on a Linear Network

Given two point patterns `X`

and `Y`

on a linear network,
finds the nearest neighbour in `Y`

of each point of `X`

using the shortest path in the network.

##### Usage

```
## S3 method for class 'lpp':
nncross(X, Y,
iX=NULL, iY=NULL,
what = c("dist", "which"),
...,
method="C")
```

##### Arguments

- X,Y
- Point patterns on a linear network (objects of class
`"lpp"`

). They must lie on the*same*linear network. - iX, iY
- Optional identifiers, used to determine whether a point in
`X`

is identical to a point in`Y`

. See Details. - what
- Character string specifying what information should be returned.
Either the nearest neighbour distance (
`"dist"`

), the identifier of the nearest neighbour (`"which"`

), or both. - ...
- Ignored.
- method
- Internal use only.

##### Details

Given two point patterns `X`

and `Y`

on the same linear
network, this function finds, for each point of `X`

,
the nearest point of `Y`

, measuring distance by the shortest path
in the network. The distance between these points
is also computed.

The return value is a data frame, with rows corresponding to
the points of `X`

. The first column gives the nearest neighbour
distances (i.e. the `i`

th entry is the distance
from the `i`

th point of `X`

to the nearest element of
`Y`

). The second column gives the indices of the nearest
neighbours (i.e. the `i`

th entry is the index of
the nearest element in `Y`

.)
If `what="dist"`

then only the vector of distances is returned.
If `what="which"`

then only the vector of indices is returned.

Note that this function is not symmetric in `X`

and `Y`

.
To find the nearest neighbour in `X`

of each point in `Y`

,
use `nncross(Y,X)`

.

The arguments `iX`

and `iY`

are used when
the two point patterns `X`

and `Y`

have some points in
common. In this situation `nncross(X, Y)`

would return some zero
distances. To avoid this, attach a unique integer identifier to
each point, such that two points are identical if their
identifying numbers are equal. Let `iX`

be the vector of
identifier values for the points in `X`

, and `iY`

the vector of identifiers for points in `Y`

. Then the code
will only compare two points if they have different values of the
identifier. See the Examples.

##### Value

- By default (if
`what=c("dist", "which")`

) a data frame with two columns: dist Nearest neighbour distance which Nearest neighbour index in `Y`

- If
`what="dist"`

, a vector of nearest neighbour distances.If

`what="which"`

, a vector of nearest neighbour indices.

##### See Also

`nndist.lpp`

for nearest neighbour
distances in a single point pattern.

##### Examples

```
# two different point patterns
X <- runiflpp(3, simplenet)
Y <- runiflpp(5, simplenet)
nn <- nncross(X,Y)
nn
plot(simplenet, main="nncross")
plot(X, add=TRUE, col="red")
plot(Y, add=TRUE, col="blue")
XX <- as.ppp(X)
YY <- as.ppp(Y)
i <- nn$which
arrows(XX$x, XX$y, YY[i]$x, YY[i]$y, length=0.15)
# two patterns with some points in common
X <- Y[1:2]
iX <- 1:2
iY <- 1:5
nncross(X,Y, iX, iY)
```

*Documentation reproduced from package spatstat, version 1.37-0, License: GPL (>= 2)*