1

2D 平面上に膨大な数の点が与えられます。各ポイントについて、セット内の最も近いポイントを見つける必要があります。たとえば、初期セットが次のようになっているとします。

 foo <- data.frame(x=c(1,2,4,4,10),y=c(1,2,4,4,10))

出力は次のようになります。

 ClosesPair(foo)
 2
 1
 4
 3
 3 # (could be 4 also)

何か案が?

4

3 に答える 3

1

以下に例を示します。すべてが単一の関数にラップされます。最適化のために少し分割することをお勧めします。

ClosesPair <- function(foo) {
  dist <- function(i, j) {
    sqrt((foo[i,1]-foo[j,1])**2 + (foo[i,2]-foo[j,2])**2)
  }

  foo <- as.matrix(foo)

  ClosestPoint <- function(i) {  
    indices <- 1:nrow(foo)
    indices <- indices[-i]

    distances <- sapply(indices, dist, i=i, USE.NAMES=TRUE)

    closest <- indices[which.min(distances)]
  }

  sapply(1:nrow(foo), ClosestPoint)
}
ClosesPair(foo)
# [1] 2 1 4 3 3

当然のことながら、それはネクタイをうまく処理しません。

于 2013-05-21T10:22:11.590 に答える
0

パッケージを使用しますspatstat。この種のことを行うための組み込み関数があります。

于 2013-05-21T11:30:47.223 に答える