【发布时间】:2017-06-14 10:09:43
【问题描述】:
我无法让下面的代码工作。我正在尝试计算我的数据集中所有可能的经纬度组合之间的距离。
我将使用的示例输入数据:
p <- data.frame(lat=runif(6,-90,90), lon=runif(6,-180,180) );
我无法让下面的代码工作。距离函数不起作用,所以我尝试了distm,但这也给了我一条错误消息。错误信息列在代码下方。
d <- setNames(do.call(rbind.data.frame,
combn(1:nrow(p), 2, simplify = FALSE)),
c('p1','p2'));
d$dist <- sapply(1:nrow(d), function(r){
distance(p$lat[d$p1[r]], p$lat[d$p2[r]], p$lon[d$p1[r]], p$lon[d$p2[r]])
})
d$dist <- sapply(1:nrow(d), function(r){
distm(p$lat[d$p1[r]], p$lat[d$p2[r]], p$lon[d$p1[r]], p$lon[d$p2[r]])
})
#> Error in distm(p$lat[d$p1[r]], p$lat[d$p2[r]], p$lon[d$p1[r]], p$lon[d$p2[r]]) :
#> unused argument (p$lon[d$p2[r]])
【问题讨论】:
-
也许是
sapply(combn(nrow(p), 2, simplify = FALSE), function(i){geosphere::distHaversine(p[i[1], 2:1], p[i[2], 2:1])}) -
这似乎奏效了,但价值确实很大。单位是米吗? @alistaire
-
distHaversine 返回的值与 r(地球半径)参数的单位相同,默认为米。它们应该是很大的数字,因为您的样本数据存在很大差异。
标签: r latitude-longitude