3

总而言之,我正在尝试创建一个类似于 Nathan Yau 在这篇文章中所做的“大圆圈”的地图。但是,我正在尝试为整个世界做这件事,并且所有人都在一个地方。我似乎对它的循环部分有问题。如果我只使用一个纬度/经度组合,一切正常。一旦我把我的桌子建得更大,我就会得到错误(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")  
}
4

2 回答 2

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)
...
}
于 2013-06-26T21:04:13.347 回答
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 )

在此处输入图像描述

于 2013-06-26T22:25:16.770 回答