r - 根据两个坐标之间的最近距离对矩阵进行排序

如何根据两个坐标之间的最近距离对矩阵进行排序?

例如,我有这个矩阵:

> x
      [,1] [,2]
[1,]    1    1
[2,]    3    9
[3,]    2    6
[4,]    2    8

我希望矩阵的第一行是一个初始坐标。在我手动计算两个坐标之间的距离后,我发现x[1,]x[3,] 的距离最近。然后,x[3,]x[4,] 的距离最近。 x[4,]x[2,] 的距离最近。所以排序矩阵将是:

    [,1] [,2]
[1,]    1    1
[2,]    2    6
[3,]    2    8
[4,]    3    9

我尝试编写下面的 R 代码。但它没有用。

closest.pair <- c(NA,NA)                  
closest.distance <- Inf                    
for (i in 1:(n-1))                         
  for (j in (i+1):n) {
    dist <- sum((houses[i,]-houses[j,])^2) 
    if (dist<closest.distance) {           
      closest.pair <- c(i,j)               
    }
    print(houses[closest.pair,])
  }

最佳答案

这是一个使用循环的可能解决方案:

## We determine the minimum distance between the coordinates at the current index cur 
## and those at the remaining indexes ind
cur = 1;    
ind = c(2:nrow(x));
## We put our resulting sorted indexes in sorted
sorted = 1;
while(length(ind)>=2){
    pos = ind[which.min(rowSums((x[cur,]-x[ind,])^2))];
    ## At each iteration we remove the newly identified pos from the indexes in ind
    ## and consider it as the new current position to look at
    ind = setdiff(ind,pos);
    cur = pos;
    sorted = c(sorted,pos)}
sorted = c(sorted,ind)

res = x[sorted,];

     [,1] [,2]
[1,]    1    1
[2,]    2    6
[3,]    2    8
[4,]    3    9

https://stackoverflow.com/questions/48142562/

相关文章:

php - Laravel Dusk 测试 click() 不工作

jenkins - 在领域中使用唯一凭据 - Jenkins 本地实例

amazon-web-services - 按创建日期查询 S3 存储桶文件

r - lavaan 中的多组 SEM 约束回归系数

r - 在 igraph 中绘制适合度分布的幂律

java - 将原始类型传递给 JAX RS POST

Angular 4 - 标题导航栏消失

c++ - 是否有必要在 std::coroutine_handle 上调用 destroy?

python - 展开文本小部件以填充 Tkinter 中的整个父框架

tensorflow - 将 Keras 与 TensorFlow 后端一起使用时,如何禁用 cuD