[R] distance between two matrices

Liaw, Andy andy_liaw at merck.com
Wed Jan 28 14:10:41 CET 2004


You can try and see if knn1() in the `class' package (part of the VR bundle)
can handle the job in one shot.  If not, just do it in chunks of B.  For
your example:

> id <- 1:nrow(A)
> knn1(A, B, id)
[1] 3 2 3
Levels: 1 2 3 4 5 6

(I believe it returns factor, but that can easily be converted back to
numeric.)

HTH,
Andy

> From: Sundar Dorai-Raj
> 
> Hi all,
>    Say I have a matrix A with dimension m x 2 and matrix B with 
> dimension n x 2. I would like to find the row in A that is closest to 
> the each row in B. Here's an example (using a loop):
> 
> set.seed(1)
> A <- matrix(runif(12), 6, 2) # 6 x 2
> B <- matrix(runif(6), 3, 2)  # 3 x 2
> m <- vector("numeric", nrow(B))
> for(j in 1:nrow(B)) {
>    d <- (A[, 1] - B[j, 1])^2 + (A[, 2] - B[j, 2])^2
>    m[j] <- which.min(d)
> }
> 
> All I need is m[]. I would like to accomplish this without using the 
> loop if possible, since for my real data n > 140K and m > 1K. I hope 
> this makes sense.
> 
> Thanks,
> Sundar
> 
> 


------------------------------------------------------------------------------
Notice:  This e-mail message, together with any attachments,...{{dropped}}




More information about the R-help mailing list