對不起,這將是一個for循環101問題。我很努力寫一個簡單的for循環來生成基於經緯度數據在空間數據上使用一個簡單的循環
locations <-read.csv("distances.csv")
地區城市之間距離的表返回如下表:
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)
}
這讓我對紐約的正確值:
[1] 5436.133 12967.023 6697.541 0.000
所以我認爲我在整個循環中用另一個城市覆蓋了一個城市。我很感謝幫助我向我展示我錯在哪裏。非常感謝。
這裏的所有答案真的很有幫助。基於我現有的思維過程,Dominic對我來說是最容易掌握的。 'apply'是一個優雅的解決方案,感謝Dimitris和Nicola,我會檢查這個包,儘管從我的嘗試中可以看出,超越2D思維可能需要一些時間! – RichS 2015-04-03 11:14:04