首页 > 解决方案 > 成对距离两个矩阵 R

问题描述

我想在 R 中的矩阵之间运行距离。在这个例子中,我使用曼哈顿距离,但我想应用其他公式。我的问题是,有没有一种方法可以将函数逐行应用于 R 中的其他矩阵行?

在这个例子中,我只有两个变量,但我想应用超过 10 个变量。

谢谢。

set.seed(123)
mat1 <- data.frame(x=sample(1:10000,3), 
                   z=sample(1:10000,3))
mat2 <- data.frame(x=sample(1:100,3), 
                   z=sample(1:1000,3))

dista<-matrix(0,ncol=2,nrow=2)
for (j in 1:nrow(mat1)){
  for(i in 1:nrow(mat2)){
    dista[i,j]<-sqrt((mat1[i,1]-mat2[j,1]) + (mat1[i,2]-mat2[j,2]))
  }
}

dista

标签: rrowpairwise

解决方案


您可以使用该proxy软件包来解决这些问题。默认情况下,proxy::dist将矩阵或数据框的每一行视为一个“对象”。

library(proxy)

proxy::dist(mat1, mat2, method="Manhattan")
     [,1]  [,2]  [,3] 
[1,]  4804  4832  4656
[2,]  3708  3736  3560
[3,] 17407 17435 17259

proxy::dist(mat1, mat2, method="Euclidean")
     [,1]      [,2]      [,3]     
[1,]  3397.036  3417.059  3295.962
[2,]  2761.996  2787.495  2708.075
[3,] 12308.674 12328.422 12204.286

在 R 控制台中键入vignette("overview", "proxy")以查看它包含哪些相似性和距离,并查看文档,了解proxy::pr_DB您是否要添加自己的可与proxy::dist.


推荐阅读