пересечение / изменение происходит медленно, как я могу оптимизировать этот вызов? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть этот вызов

distances <- crossing(nodes, gps_points) %>%
    mutate(dist = geosphere::distHaversine(cbind(lon, lat), cbind(rlon, rlat)))

Но это занимает много времени. Просто функция пересечения занимает 0,36 se c. Whole Statement занимает 2,587 se c.

Можно ли оптимизировать этот вызов?

dput(head(nodes))
structure(list(ids = c(292376151, 1112377287, 6902561109, 5324247975, 
1112377281, 7018492265), ids_igraph = c(128974, 128973, 128972, 
128971, 128970, 128969), lon = c(11.831088, 11.830884, 11.8307377, 
11.8307106, 11.8305447, 11.8303853), lat = c(48.1111416, 48.1108747, 
48.1106855, 48.1106505, 48.1104559, 48.1102703)), row.names = c(833886L, 
2173435L, 4292366L, 4058008L, 2173434L, 4315822L), class = "data.frame")

 dput(head(gps_points))
structure(list(rlon = c(11.7989692, 11.7982155, 11.7968209, 11.7961655, 
11.7957267, 11.7944537), rlat = c(48.0742471, 48.0739067, 48.0733855, 
48.0730923, 48.0728656, 48.0722014)), row.names = c(3250429L, 
3250548L, 323901L, 3250542L, 3250544L, 323902L), class = "data.frame")

вы также можете скачать node и gps_points как файлы csv или dput здесь:

csv-файлы node и gps_points

dput-файлы node и gps_points

Большое спасибо, BR.

1 Ответ

0 голосов
/ 15 июля 2020

Я изменил geosphere::distHaversine на geodist::geodist_vec() с настройкой measure = "cheap", чтобы улучшить время выполнения.

...