所以我正在创建映射函数,它用点绘制各种端口的坐标。我想创建一个功能,允许用户选择他们想要标记的端口,然后更改标签位置。
以下是各个港口及其坐标:
Labels Lon Lat
1 Halifax, NS -63.59341 44.68068
2 St. John's, NL -52.73304 47.59341
3 Saint John, NB -66.05236 45.27925
4 Portland, ME -70.24435 43.68068
5 Woods Hole, MA -70.68068 41.62832
6 Nuuk, Greenland -51.75049 64.17453
7 Boston, MA -71.08727 42.36652
我的功能:
port.label <- function (pos1, cex1 = 0.6, offset1 = 0.2, col1 = "deeppink") {
port.file<-read.csv("V:/Science/Finalised Map Files/Ports.csv")
Lon <- port.file$Lon
Lat <- port.file$Lat
Lab <- paste(port.file$Lab)
a <- locator()
ay <- unlist(a[2])
aylab <- sapply (ay, function (x) which.min (abs (x - Lat)))
b <- for (i in (1:length (aylab))) {
text (x = Lon [aylab[i]], y = Lat [aylab[i]], labels = Lab [aylab[i]],
pos = pos1, cex = cex1, offset = offset1, col = col1)
}
}
现在,当我尝试使用以下命令运行它时:port.label(pos1=c(1,2,3,4))
单击四个点后,它仅使用第一个值 (1) 返回标签,因此低于该点。所以它只取第一个值。我尝试将 pos1 长度预先设置为与单击的端口数相关,但这也无济于事。
关于为什么它只取第一个 pos1 值而不是整个向量的任何想法?谢谢。