繁体   English   中英

在R中创建距离矩阵(不使用dist())

[英]create a distance matrix in R (without using dist())

我需要从一个矩阵创建一个距离矩阵,该矩阵返回列之间的距离。

我知道它存在一个名为dist()的函数,但我不能使用它,因为我将使用不常见的距离函数。

我当时正在考虑使用Apply,但是我不知道如何编写它。

我创建的循环是:

 dista <- function(A,distance){
  dist_matrix=matrix(0,dim(A)[2],dim(A)[2])
  for (i in 1:(dim(A)[2]-1)){
    for(j in (i+1):(dim(A)[2])){
      if(distance=='cosine') dist_matrix[j,i]<- (1-sum(A[,i]*A[,j]))/(sqrt(sum(A[,i]^2))+sqrt(sum(A[,j]^2)))
    }
  }
  dist_matrix
}

假设您有一些像这样的数据框:

df <- data.frame(x = rnorm(10, 5, 1), y = rnorm(10))

您可以按以下方式使用Apply:

apply(df, 1, dist)

要使用客户距离功能,您可以将上述对dist的呼叫替换为:

apply(df, 1, my_own_dist)

当然,这遍历数据的每一行,并且仍然比基于矩阵的计算慢。 了解距离功能的实际作用可能会帮助人们使您更有效地解决问题。

根据以下评论进行编辑。...

如果您要计算原始矩阵A中每对列之间的成对距离,则可以尝试如下操作:

apply(combn(1:ncol(A), 2), 2, function(x) my_dist_function(A[, x]))

首先生成所有唯一列对,然后一次遍历它们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM