Вероятно, самым быстрым является использование пакета RANN
- при условии, что у вас есть x
и y
:
library(RANN)
m <- as.matrix(nn(data.frame(x=x, y=y, z=rep(0,length(x))), p=30)$nn.idx)
дает вам матрицу 3000 х 30 ближайших соседей. Это на несколько порядков быстрее, чем наивный квадратичный поиск.
Редактировать: Просто для полноты значения не имеет значения, какой интерфейс ANN вы выберете, с FNN
(предложено Spacedman) это будет
library(FNN)
m <- get.knn(data.frame(x=x, y=y), 30)$nn.index