[R] nested for() loops for returning a nearest point

Peter Dalgaard BSA p.dalgaard at biostat.ku.dk
Wed Jul 30 18:58:55 CEST 2003

"Steve Sullivan" <ssullivan at qedgroupllc.com> writes:

> neighbor.id <- vector(length=length(D1$lat))
> dist.geo <- vector(length=length(D2$lat))
> for(i in 1:length(neighbor.id)){
> for(j in 1:length(dist.geo)){
> dist.geo[j] <- D1$lat[i]-D2$lat[j]}  
> # Yes, I know that isn't the right formula, this is just a test
> neighbor.id[i] <- D2$point.id[which.min(dist.geo)]}
> What I get is a neighbor.id of the appropriate length, but which
> consists only of the same value repeated.  Should I instead pass the
> which.min(dist.geo) to a variable before exiting the inner (j) loop, and
> reference that variable in place of which.min(dist.geo) in the last
> line?  Or is this whole approach wrongheaded?

Wouldn't you want to define dist.geo with an abs() ? Otherwise, the
North Pole might have the largest negative difference every time...

Apart from that, things look sane to me (but the heat is killing me
today...). You can vectorize things as in 

dist.geo <- abs(D1$lat[i]-D2$lat)

and get rid of the inner loop, but the basic idea looks correct.

   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)             FAX: (+45) 35327907

More information about the R-help mailing list