R中的测地距离函数用于用户集

时间:2015-02-17 23:53:32

标签: r function social-networking distance euclidean-distance

我正在尝试计算社交网络用户之间的测地距离。假设我有2个用户U1和U2,我如何在R中声明该功能,使得测地距离函数返回任意两个用户与包含1000个用户的大数据集之间的距离。

d <- function (U1(lat1,lon1),U2(lat2,lon2))
{
  rad <- pi/180
  a1 <- lat1 * rad
  a2 <- lon1 * rad
  b1 <- lat2 * rad
  b2 <- lon2 * rad
  dlon <- b2 - a2
  dlat <- b1 - a1
  a <- (sin(dlat/2))^2 + cos(a1) * cos(b1) * (sin(dlon/2))^2
  c <- 2 * atan2(sqrt(a), sqrt(1 - a))
  R <- 6378.145
  d <- R * c
  miles <- d*0.621
  return(c(d,miles))
}

上述代码不起作用。我不知道如何在R中的函数定义中使用(lat,lon)coordiantes声明两个用户。有没有其他方法可以这样说,如果我有1000个用户的数据集我可能能够计算测地线任何2个用户之间的距离。

1 个答案:

答案 0 :(得分:0)

这个图书馆看起来很有希望:

library(geosphere)
distm(c(lon1,lat1), c(lon2,lat2))

有两个矩阵:

distm(
  matrix( c(
    1, 3, 
    2, 2,
    3, 1
  ), nrow = 3, ncol = 2),

  matrix( c(
    4, 6, 
    5, 5,
    6, 4,
    3, 1
  ), nrow = 4, ncol = 2)
)

n个用户的矩阵和它们之间的距离:     #用户数量     n < - 100

# positions
lat <- rnorm(n, 46, 1) 
lon <- rnorm(n, 14, 1) 

#distm also accepts a matrix (2 x n):
cmat <- matrix( c(lat, lon), nrow = n, ncol = 2)
distm(cmat)