用R创建大圆图

用R创建大圆图,r,for-loop,map,great-circle,R,For Loop,Map,Great Circle,全部,, 我正在尝试创建一个带有“大圆圈”的地图,类似于这张照片中的Nathan Yau。然而,我正试图为全世界做这件事,所有的人都来到一个地方。我似乎对它的循环部分有问题。如果我只使用一个lat/long组合,一切都正常。一旦我把表格扩大,我就会出现错误(Error in.pointToMatrix(p1):向量的长度错误,应该是2)我是R的100%新手,希望得到一些帮助 lat.txt LAT,LONG 39.164141,-121.640625 library(maps) lib

全部,, 我正在尝试创建一个带有“大圆圈”的地图,类似于这张照片中的Nathan Yau。然而,我正试图为全世界做这件事,所有的人都来到一个地方。我似乎对它的循环部分有问题。如果我只使用一个lat/long组合,一切都正常。一旦我把表格扩大,我就会出现错误(
Error in.pointToMatrix(p1)
:向量的长度错误,应该是2)我是R的100%新手,希望得到一些帮助

lat.txt

LAT,LONG  
39.164141,-121.640625
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")  
}
R命令

LAT,LONG  
39.164141,-121.640625
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")  
}
库(地图)
图书馆(地球圈)

lat_me我看到你用
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)
...
}
for(1中的i:nrow(数据)){

inter
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 )

对不起,这实际上是从R中剪切+粘贴的。符号+只是图形化地表示“for”循环我相信我建议你不要使用循环,因为
gcIntermediate
已经矢量化了。@Andrie你能详细说明一下吗?我现在正在研究为什么我可以这样做,但为此我遵循了Nathan给出的示例。-不久前,我发布了一些使用
lattice
graphics的代码。哇……这就是我的想法当然奏效了,这就解决了我的问题perfectly@bread555,欢迎来到S.O.如果此答案解决了您的问题,请确保通过单击问题旁边的绿色复选标记进行指示。@Ricardosporta我当然会的,我只是在等待是否还有其他内容。不过,我现在就选择它。@Simon0101哇。感谢您的支持进一步的解释。看起来我要查找很多这些术语/命令,因为我以前没有见过它们。具体来说,使用空间线更容易绘图是什么意思?