计算最小Haversine距离R

时间:2018-09-12 19:14:45

标签: r

我有一个具有8.5个唯一纬度/经度的数据框和一个具有693个唯一纬度/经度的表。我想返回一个向量,该向量包含针对693个位置的8.5 M行中的每一行的最小Haversine距离(以米为单位)。

我写了下面的函数来完成我需要做的事情,但是不能以我需要的规模进行操作。我希望不必对数据进行子集处理并针对子集运行。

我认为我的问题很大一部分是由于我的功能效率低下,但没有想到一个优雅而有效的解决方案。仅供参考:我有一个带有512GB RAM的24核CPU,因此对我的数据进行操作不是问题。

library(geosphere)

Lat1 <- c(29.67633, 42.58322, 42.89643, 40.08702, 32.41955, 36.92045)
Long1 <- c(-90.77054, -87.86715, -88.04080, -74.97728, -92.98497, -93.93032)
Lat2 <- c(31.19734, 39.67220, 33.64105, 32.40145, 61.18134, 64.83558)
Long2 <- c( -85.41284, -86.36804, -86.61426, -86.21394, -149.93617, -147.82972)

df1 <- data.frame(Lat1, Long1)
df2 <- data.frame(Lat2, Long2)

min_dist  <- function(df, dlr_df, long1, lat1, long2, lat2){
  # Calculate min distance from all dealers
  d <- matrix(NA,nrow(df),nrow(dlr_df))
  for (i in 1:nrow(df)) {
    for (j in 1:nrow(dlr_df)) {
      d[i,j] <- distHaversine(c(long1[i], lat1[i]), c(long2[j], lat2[j]))/1000
    }
    m <- apply(d, 1, function(x) min(x))
  }
  return(m)
}

distance <- min_dist(df1, df2, df1$Long1, df1$Lat1, df2$Long2, df2$Lat2)

我的结果是:

 [1] 529.9173 347.5628 385.2080 973.4943 609.8046 727.9073

当我在整个数据帧上运行时,R崩溃。

预先感谢

0 个答案:

没有答案