[R] Distances between two datasets of x and y co-ordinates
Liaw, Andy
andy_liaw at merck.com
Fri Mar 14 15:52:21 CET 2008
From: adrian at maths.uwa.edu.au
> Andrew McFadden <Andrew.McFadden at maf.govt.nz> writes:
>
> > I am trying to determine the distances between two datasets
> of x and y
> > points.
>
> This can be done efficiently in the package 'spatstat'.
>
> library(spatstat)
> crossdist(x1, y1, x2, y2)
>
> where x1, y1 are vectors of coordinates for the first set of points
> and x2, y2 for the second set. See help(crossdist.default)
>
> This is executed in C and is faster than using outer() or apply().
The margin may not be as large as you imagine:
crossdist2 <- function(x1, y1, x2, y2) {
c1 <- complex(real=x1, imaginary=y1)
c2 <- complex(real=x2, imaginary=y2)
dist <- outer(c1, c2, function(z1, z2) Mod(z1-z2))
dist
}
R> set.seed(17)
R> n <- 1000
R> x1 <- rnorm(n)
R> y1 <- rnorm(n)
R> x2 <- rnorm(n)
R> y2 <- rnorm(n)
R> system.time(d2 <- crossdist2(x1, y1, x2, y2))
user system elapsed
1.03 0.09 1.17
R> library(spatstat)
R> system.time(d1 <- crossdist2(x1, y1, x2, y2))
user system elapsed
1.08 0.03 1.12
R> all.equal(d1, d2)
[1] TRUE
Andy
> The result is a matrix giving the distance between each pair of points
> (the first point in the first dataset and the second point in
> the second
> set). If these datasets are large, you can of course run into
> trouble with
> the size of this matrix.
>
> If you just wanted to find the distance to the *nearest* point
> (or identify which point is nearest), use the function nncross().
>
> Adrian Baddeley
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>
>
------------------------------------------------------------------------------
Notice: This e-mail message, together with any attachme...{{dropped:15}}
More information about the R-help
mailing list