1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
   | 
  round.id <- function (dat, r = 20){     gx <- dat$gx     gy <- dat$gy     id.list <- list()    for (i in 1:nrow(dat)){         x <- gx[i]         y <- gy[i]         dat.sub <- dat[(gx < x + r) &                           (gx > x - r) &                           (gy < y + r) &                           (gy > y - r), ]                   if(nrow(dat.sub) > 1){             sp <- c()                         for(j in 1:nrow(dat.sub)){                 mat <- data.frame(c(x, dat.sub$gx[j]),                                    c(y, dat.sub$gy[j]))                 sp[j] <- (dist(mat) <= r)             }             id.include <- dat.sub$ID[sp]         } else {             id.include <- 0         }         id.list[[i]] <- id.include     }         return(id.list) }
 
 
  Ringring.id <- function (dat, r = c(20, 25)){     r1 <- max(r)     r2 <- min(r)     gx <- dat$gx     gy <- dat$gy     id.list <- list()              for (i in 1:nrow(dat)){         x <- gx[i]         y <- gy[i]         dat.sub <- dat[(gx < x + r1) &                          (gx > x - r1) &                          (gy < y + r1) &                          (gy > y - r1), ]                                              if(nrow(dat.sub) > 1){            sp <- c()                       for(j in 1:nrow(dat.sub)){                mat <- data.frame(c(x, dat.sub$gx[j]),                                   c(y, dat.sub$gy[j]))                sp[j] <- (dist(mat) <= r1 & dist(mat) >= r2)            }            id.include <- dat.sub$ID[sp]         } else {            id.include <- 0         }         id.list[[i]] <- id.include     }         return(id.list) }
  ID <- 1:300 gx <- runif(300, 0, 100) gy <- runif(300, 0, 100) dat <- data.frame(ID, gx, gy) res.round <- round.id(dat, r = 25) par(mfrow = c(1, 2)) 
  plot(gy ~ gx, data = dat, col = "gray" ) vt = seq(-pi,pi,by=0.002); x = 25 * sin(vt) + gx[10]; y = 25 * cos(vt) + gy[10];
  lines(y ~ x);
  points(gx[10] , gy[10] , pch = 19, col = 2) round10 <- res.round[[10]] points(gx[round10], gy[round10], col = "green")
 
 
  res.ring <- ring.id(dat, c(15, 25)) plot(gy ~ gx, data = dat, col = "gray" ) vt = seq(-pi,pi,by=0.002); x1 = 25 * sin(vt) + gx[10]; y1 = 25 * cos(vt) + gy[10];
  lines(y1 ~ x1); x2 = 15 * sin(vt) + gx[10]; y2 = 15 * cos(vt) + gy[10];
  lines(y2 ~ x2); points(gx[10] , gy[10] , pch = 19, col = 2) ring10 <- res.ring[[10]]
  points(gx[ring10], gy[ring10], col = "blue")
 
  |