2009/2/27 Brian Bolt <bb...@kalypsys.com>:
> awesome.  Thank you very much for the quick response. I think this is
> exactly what I was looking for.

 Here's a basic framework:

 `idloc` <-
  function(xy,n=1, tol=0.25){

    tol2=tol^2

    icoords = 
cbind(grconvertX(xy[,1],to="inches"),grconvertY(xy[,2],to="inches"))
    hit = c()
    missed = matrix(ncol=2,nrow=0)
    for(i in 1:n){
      ptU = locator(1)
      pt = c(grconvertX(ptU$x,to='inches'),grconvertY(ptU$y,to="inches"))

      d2 = (icoords[,1]-pt[1])^2 + (icoords[,2]-pt[2])^2
      if (any(d2 < tol2)){
        print("clicked")
        hit = c(hit, (1:dim(xy)[1])[d2 < tol2])
      }else{
        print("missed")
        missed=rbind(missed,c(ptU$x,ptU$y))
      }

    }
    return(list(hit=hit,missed=missed))

  }

Test:

 xy = cbind(1:10,runif(10))
 plot(xy)
 idloc(xy,10)

 now click ten times, on points or off points. You get back:

$hit
[1]  4  6  7 10

$missed
         [,1]      [,2]
[1,] 5.698940 0.6835392
[2,] 6.216171 0.6144229
[3,] 5.877982 0.5752569
[4,] 6.773190 0.2895761
[5,] 7.210847 0.3126149
[6,] 9.239985 0.5614337

 - $hit is the indices of the points you hit (in order, including
duplicates) and $missed are the coordinates of the misses.

 It crashes out if you hit the middle button for the locator, but that
should be easy enough to fixup. It doesn't label hit points, but
that's also easy enough to do.

Barry

______________________________________________
R-help@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.

Reply via email to