我花了很多时间试图解决这个问题。我有一个6点(纬度,经度)的数据集,以这种方式称为data
:
Latitude Longitude
-36.525 -72.951
-36.523 -72.943
-36.522 -72.937
-36.531 -72.954
-36.530 -72.945
-36.529 -72.937
问题要求用毕达哥拉斯定理计算所有调用函数的点之间的距离(没有外部包)。事实上,我已经为1和6做过了,但我不能让它在所有这些循环中工作。 我的尝试是:
#Function
distance<-function (lat2,lat1,lon2,lon1){
c <- sqrt((lat2-lat1)^2+(lon2-lon1)^2)
#Converting to km.
c <- c*60*1.852
}
#Point 1 and 6
test <- distance(data[6,1],data[1,1],data[6,2],data[1,2])
test
但是我试图将它包含在循环中时完全混淆了。
for(x in 1:nrow(data)){
for(y in 1:ncol(data)){
row <- distance(data[x,y])
}
}
print(row)
答案 0 :(得分:2)
我只想详细说明我之前的评论:dist()
函数可用于计算一组数据点之间的Eucledian距离。它是完全矢量化的,这意味着通过点坐标的循环是不必要的(这是在#34;在功能的引擎盖下完成的。)
在您的示例中,欧几里德距离可以通过以下方式计算:
data1 <- read.table(text = "Latitude Longitude
-36.525 -72.951
-36.523 -72.943
-36.522 -72.937
-36.531 -72.954
-36.530 -72.945
-36.529 -72.937", header=TRUE)
dist(data1)*60*1.852 #multipliers to convert into km according to OP
# 1 2 3 4 5
#2 0.9163190
#3 1.5909963 0.6759166
#4 0.7454156 1.5113954 2.1374359
#5 0.8678749 0.8089658 1.2571793 1.0062344
#6 1.6179316 0.9428845 0.7778400 1.9020680 0.8958781
输出是(严格地说)下三角矩阵,其包含数据集中每对点之间的距离;在这种情况下,点1到6。