Я написал следующий код R, который выделяет ближайший почтовый индекс к набору северных/восточных координат:
# Set of northing / easting coordinates that I need to assign a postcode to
x1 <- c(1,2,4,6,7)
y1 <- c(5,2,4,7,8)
# Postcode with northing / easting coordinates
postcode <- c("Postcode A", "Postcode B", "Postcode C", "Postcode D")
x2 <- c(5,3,4,2)
y2 <- c(8,1,2,4)
# Function that attributes closest postcode to (x1, y1) coordinates
algo <- function(x, y)
{
dist <- which.min(sqrt(((x2 - x)^2) + ((y2 - y)^2)))
}
# mapply to run the function, and find the closest coordinates
postcode[mapply(algo, x1, y1, SIMPLIFY = T)]
[1] "Postcode D" "Postcode B" "Postcode C" "Postcode A" "Postcode A"
Поскольку у меня более 500 000 (x1, y1) координат и более 1 000 000 (x2, y2) координат, эта функция отображения занимает много времени, и я хочу следить за ходом выполнения. Я понимаю, что у mlply есть функция индикатора выполнения, но я не могу заставить ее работать. Что я сделал:
# Using mlply to run the function, and find the closest coordinates with progress bar
library(plyr)
postcode[mlply(cbind(x1, y1), .fun = algo, .progress = "tk")]
Что я делаю не так? Был бы признателен за правильный код R для mlply (или других функций m * ply) и объяснение того, почему вышеизложенное неверно.
Большое спасибо за ваше время и внимание.