如何加速R中的嵌套循环

时间:2017-05-14 09:41:25

标签: r for-loop geolocation nested-loops

我有2个data.frames:

  1. 用户,其中包含每个用户的经度和纬度
  2. 停止包含每个公共汽车站的经度和纬度
  3. 我想计算在特定半径(米)内至少有1个巴士站的用户百分比。

    所以我创建了一个带有嵌套循环的函数来遍历每个用户,只要在所需的半径内有1个停止,就会中断。

    解决方案有效,问题在于性能。有没有办法加快速度?

    percentage_of_users_near_to_busstop <- function(users, stops, radius) {
       users$stops_in_radius <- 0
       users_length <- nrow(users)
       stops_length <- nrow(stops)
       for (i in 1:users_length) {
          for (j in 1:stops_length) {
             if ( distm (c(users$longitude[i], users$latitude[i]), 
                     c(stops$longitude[j], stops$latitude[j]), 
                     fun = distHaversine) < radius)
             { users[i, "stops_in_radius"] <- users[i, "stops_in_radius"] + 1
             break }
          }
          #print(paste0(i/users_length*100, "%"))
       }
       return(nrow(subset(users, stops_in_radius > 0))/nrow(users))
    }
    

0 个答案:

没有答案