首页 > 解决方案 > 计算曼哈顿距离和欧几里得距离

问题描述

my_dist_calculator <- function(a, b, metric = "euclidean"){
 if(metric == "manhattan"){
    mydistance<-function(a,b){
      d<-abs(a-b)
      d<-sum(d)
      return(d)
    }

}else{
    mydistance2<- function(a, b){
      d<-(a-b)^2
      d<-sum(d)
      d<-sqrt(d)
      return(d)
    }

  }

  return(mydistance) 
}
a = c(1.7, 5)
b = c(4, 72)

my_dist_calculator(a, b, metric = "manhattan")
my_dist_calculator(a, b)

嗨,我是 R 新手,我目前正在尝试计算欧几里德距离和曼哈顿距离。我得到的输出是:环境:0x10c0bfb60 和字节码:0x10caea288。我不明白为什么。有人可以帮我理解我在这里做错了什么吗?谢谢!

标签: reuclidean-distance

解决方案


当你在 R 中工作时,你应该尝试为你想做的任何事情找到一个函数。在 99% 的情况下,有一个(可能不在基本包中,而是在互联网的某个地方。

您的问题的解决方案是dist(使用检查文档?dist)有代码:

a = c(1.7, 5)
b = c(4, 72)
x <- rbind(a,b)
dist(x, method = "euclidean")
dist(x, method = "manhattan")

对于您的代码,您需要在 return 语句中评估函数:

my_dist_calculator <- function(a, b, metric = "euclidean"){
  if(metric == "manhattan"){
    mydistance<-function(a,b){
      d<-abs(a-b)
      d<-sum(d)
      return(d)
    }

  }else{
    mydistance<- function(a, b){
      d<-(a-b)^2
      d<-sum(d)
      d<-sqrt(d)
      return(d)
    }

  }

  return(mydistance(a,b)) ### <------ mydistance changed to mydistance(a,b)
}
a = c(1.7, 5)
b = c(4, 72)

my_dist_calculator(a, b, metric = "manhattan")
my_dist_calculator(a, b)

推荐阅读