Используя данные о местоположении магазинов, я пытаюсь найти «конкурентов», которые определяются как другие магазины на определенном расстоянии.
Я использую geo sphere::distm
и некоторые матричные операции, как показано ниже , Проблема в том, что моя матрица довольно большая (100 000 X 100 000), и это занимает очень много времени (или моя память не поддерживает этот тип анализа). Будет ли способ сделать код ниже более эффективным? Входной файл выглядит так же, как locations_data
(но больше). Желаемым выводом является таблица данных competitors
, в которой каждый ряд содержит пары конкурентов. Я новичок в написании эффективных кодов на R и хотел попросить помощи.
locations_data<-cbind(id=1:100, longitude=runif(100,min=-180, max=-120), latitude=runif(100, min=50, max=85))
#require(geosphere)
mymatrix<-distm(locations_data[,2:3])
#require(data.table)
analyze_competitors<-function(mymatrix){
mymatrix2<-matrix(as.numeric(mymatrix<1000000), nrow(mymatrix), ncol(mymatrix)) #
competitors<-which(mymatrix2==1,arr.ind = T)
competitors<-data.table(competitors)
return(competitors)
}
competitors<-analyze_competitors(mymatrix)