# [R] Nearest neighbour in a matrix

David Winsemius dwinsemius at comcast.net
Tue Sep 27 03:03:19 CEST 2011

```On Sep 26, 2011, at 7:56 PM, Spartina wrote:

> Hello all,
>
> I am brand new to R and doing an exercise for a class. I need to
> find the
> nearest neighbour for points in the following matrix:
>
>> DistanceMatrix
>           x1       x2       x3       x4       x5
> [1,] 0.000000 2.828427 1.581139 2.236068 2.000000
> [2,] 2.828427 0.000000 1.581139 4.123106 2.000000
> [3,] 1.581139 1.581139 0.000000 2.549510 2.121320
> [4,] 2.236068 4.123106 2.549510 0.000000 4.123106
> [5,] 2.000000 2.000000 2.121320 4.123106 0.000000
>
> and syntax
> is very basic.

If we are assuming that the rows are the points in 5-space, then you
can form the unique combinations of 1:5 with the function combn(1:5,
2) and apply it to a distance function.

> apply(combn(1:5,2), 2, function(x) crossprod(DistanceMatrix[x[1], ],
+                                     DistanceMatrix[x[2], ])
+ )
[1] 15.71955 14.41565 23.93925 18.23050 19.22668 18.60190 26.01096
18.80117
[9] 16.83646 18.12667

Then select the minimum with which.min().

> which.min( apply(combn(1:5,2), 2, function(x)
crossprod(DistanceMatrix[x[1], ],
+                                     DistanceMatrix[x[2], ]) ) )
[1] 2
> combn(1:5,2)[,2]
[1] 1 3

>
> Is there a way of going at it using the pmin function?

I cannot think of one.

> Otherwise what would
> be a simple way of going about it?
>
> Sorry for posting such a basic question! I've looked at the help
> pages and
> other forums on the web but am truly stuck here.
>