R计算二维欧氏距离并新增到APP中心点的距离列问题咨询
解决方法
原有代码的错误点
- 中心点坐标用双引号包裹赋值为字符型,无法参与数值减法、幂次等运算
- 自定义函数逻辑错误:将
apply调用写在距离计算函数内部,形成逻辑混乱的递归结构 apply的MARGIN参数设置错误:MARGIN=2代表按列遍历,计算每行个体的距离应该设置为MARGIN=1,但该场景完全不需要用apply,R的向量化运算效率更高写法更简单- 第二次尝试的代码语法错误:不能直接将未调用的函数传入
data.frame()生成数据框
正确实现代码
基础R写法(无需额外安装包)
# 1. 定义APP中心点坐标,注意不要加引号,赋值为数值型 app_east <- 1440000 app_north <- 12160000 # 2. 直接向量化计算所有行的欧氏距离,新增dist.APP列 datwolfcoy$dist.APP <- sqrt((datwolfcoy$east - app_east)^2 + (datwolfcoy$north - app_north)^2)
dplyr写法(适配tidyverse生态)
如果你常用dplyr处理数据,可以用mutate新增列:
library(dplyr) app_east <- 1440000 app_north <- 12160000 datwolfcoy <- datwolfcoy %>% mutate(dist.APP = sqrt((east - app_east)^2 + (north - app_north)^2))
结果验证
你使用的二维欧氏距离计算公式本身是正确的,以你给出的第一行样本为例,east=1358690、north=12086700,代入公式计算得到的欧氏距离约为106039.6,和代码运行结果一致。
内容的提问来源于stack exchange,提问作者Alison Meeth
相关产品推荐
相关产品推荐

