Как сказал Маркус:
На самом деле вам не нужно циклически проходить через Current_Month
- data.frame.
Функция distm
- также принимает матрицу (или данные.frame) с двумя столбцами.
Это сработало для меня с небольшими фиктивными выборочными данными.
Current_Month <- data.frame("Lon" = sample(1:100, 1000, replace = TRUE),
"Lat" = sample(1:90, 1000, replace = TRUE))
start <- Sys.time()
d = distm(c(90, 90), Current_Month, fun=distHaversine)
end <- Sys.time()
end - start
> Time difference of 0.001993895 secs
In contrast to your:
start <- Sys.time()
for(i in 1:nrow(Current_Month)){
d = distm(c(90, 90), c(Current_Month$Lon[i], Current_Month$Lat[i]),
fun=distHaversine)
}
end <- Sys.time()
end - start
Time difference of 0.2293599 secs
Так что это значительно быстрее.
Затем выполните:
Current_Month$Nearby = t(ifelse(d < 1000, 1, d)) #had to transpose this one though