抱歉,这将是一个 for 循环 101 问题。我正在努力编写一个简单的 for 循环来根据经度纬度数据生成城市之间的距离表
locations <-read.csv("distances.csv")
Locations 返回下表:
City Type long lat
1 Sheffield EUR -1.470085 53.38113
2 HK WRLD 114.109497 22.39643
3 Venice EUR 12.315515 45.44085
4 New York WRLD -74.005941 40.71278
我在任务的这个特定部分的目标是生成一个相关矩阵性质的每个城市之间的距离(以公里为单位)表,对角线为 0(即所有城市与其自身的距离为零)。
为此,我使用 sp 包,它需要一个长纬度值矩阵,因此我可以删除文本,如下所示:
datmax <- data.matrix(locations)
datmax2 <- datmax[,-1:-2]
spDistsN1 工具允许我通过比较矩阵中所有城市与单个城市的距离来获取此信息。显然,我可以使用以下表达式来获取所有城市距谢菲尔德的距离(城市或第 1 行):
km <- spDistsN1(datmax2, datmax2[1,], longlat=TRUE)
这正确地给出:
[1] 0.000 9591.009 1329.882 5436.133
然而,为了实现我想要的相关矩阵样式输出,我想为每个城市实现这一点,所以我尝试编写一个 for 循环:
for (i in 1:nrow(datmax2)){
kmnew <- spDistsN1(datmax2, datmax2[i,], longlat=TRUE)
}
这给了我 NY 的正确值:
[1] 5436.133 12967.023 6697.541 0.000
所以我想我在整个循环中已经用一个城市覆盖了另一个城市。我很感谢您向我展示错误所在的帮助。非常感谢。