这是我要在rstudio中运行的代码。我知道迭代太长了。有没有最佳/更快的方法来做到这一点?我已经被困了4个多小时,而且似乎还没快结束。
我正在尝试建立415个城市和3680126个古迹之间的距离矩阵。为了进行优化,我只将这些古迹与同一国家的城市进行比较。
for(x in 1:3680126){
for(y in 1:415){
if(list2_cities$Country[y]==list1_POI$Country[x]){
distance_matrix [x,y] <- ({POI$Longitude[x]-cities$Longitude[y]}^2)+({POI$Latitude[x]-cities$Latitude[y]}^2)
}
else{
distance_matrix [x,y] <- 0
}
}
}
答案 0 :(得分:1)
也许您可以尝试使用distm
软件包中的geosphere
library(geosphere)
d <- distm(list1_POI[c("Longitude","Latitude")],list2_cities[c("Longitude","Latitude")])
m <- +(outer(list1_POI$Country,list2_cities$Country,`==`))
res <- d*m
其中
distm
部分给出了两个城市之间的所有配对距离outer
部分提供了一个掩码,以便将不匹配的城市的值设置为0
如果您想要的矩阵是稀疏的,这是另一个选择
common <- intersect(list1_POI$Country,list2_cities$Country)
rl <- match(common,list1_POI$Country)
cl <- match(common,list2_cities$Country)
d <- diag(distm(list1_POI[rl,c("Longitude","Latitude")],list2_cities[cl,c("Longitude","Latitude")]))
res <- matrix(0,length(list1_POI$Country),length(list1_cities$Country))
res[cbind(rl,cl)] <- d
您只需要找到匹配的城市并计算其距离。