全部,
我正在尝试创建一个带有“Great Circles”的地图,类似于Nathan Yau在这个posting中所做的。但是,我正在尝试为整个世界做这件事,并且所有人都进入一个地方。我似乎遇到了循环部分的问题。如果我只使用一个纬度/长度组合,一切正常。一旦我扩大了我的表格,我就会出现错误(Error in .pointsToMatrix(p1)
:向量的长度错误,应该是2)我是R的100%新手并且会喜欢一些帮助
lat.txt
LAT,LONG
39.164141,-121.640625
R命令
library(maps)
library(geosphere)
lat_me <- 45.213004
lon_me <- -68.906250
map("world", col="#f2f2f2", plot = TRUE, fill=TRUE, bg="white")
data <- read.csv("/Users/blah/R/latlon/lat.csv",sep=",", header=TRUE)
for (i in 1:length(data)) {
inter <- gcIntermediate(c(data$LONG, data$LAT), c(lon_me, lat_me), n=50, addStartEnd=TRUE)
lines(inter,col="red")
}
答案 0 :(得分:6)
我看到您使用i
索引循环,但不要在循环内的任何位置包含它。
我想你想循环遍历你的数据行。因此,将索引范围更改为1:nrow(data),并包含要为每个i绘制的行的索引。
for( i in 1:nrow(data)){
inter <- gcIntermediate(c(data$LONG[i], data$LAT[i]),
c(lon_me, lat_me),
n=50,
addStartEnd=TRUE)
...
}
答案 1 :(得分:4)
gcIntermediate
是矢量化的(正如@Andrie在评论中指出的那样),所以你不需要循环:
me <- c( 45.213004 , -68.906250 )
set.seed(123)
pts <- data.frame( x = runif(4,-180,180) , y = runif(4,-90,90) )
pts
# x y
#1 -76.47209 79.284111
#2 103.78985 -81.799830
#3 -32.76831 5.058988
#4 137.88627 70.635428
# Just supply the two column data.frame - no need for loops!
# Also return as 'SpatialLines' object to make plotting easier
inter <- gcIntermediate( pts , me , n=50 , addStartEnd=TRUE , sp = TRUE)
map("world", col="#f2f2f2", plot = TRUE, fill=TRUE, bg="white")
plot(inter ,add=T , col = "red" , lty = 2 )