r - 计算曼哈顿距离和欧几里得距离
问题描述
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。我不明白为什么。有人可以帮我理解我在这里做错了什么吗?谢谢!
解决方案
当你在 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)
推荐阅读
- groovy - 如何从 Artifactory 只下载文件(没有文件夹)
- r - 如何绘制一个框(或圆圈)以强调 R 中图形的特定区域?
- python - 如何从 ViUR 中的代码将条目附加到关系骨
- javascript - Angular Reactive Form 选择多个选定的值到复选框
- javascript - 按相同值创建对象数组
- r - 如何找到半径 250 米附近有多少个位置
- html - 使用 require 在 Angular 11 应用程序中加载图像
- python - 在 Python 中从列表中查找值的数据类型
- string - 在 Lua 中使用新行时遇到问题
- esp8266 - 我可以将 esp8266 SPI 与 ds1302 一起使用吗