为R中的一组坐标指定最近邮政编码的算法

为R中的一组坐标指定最近邮政编码的算法,r,algorithm,gis,R,Algorithm,Gis,我的问题分为两部分。我正在寻找R中的解决方案: 第1部分 我有两组(x,y)坐标,我们称之为(x1,y1)和(x2,y2): x1lappy(x1,algo,y=y1),在x1上迭代,但不在y1上迭代。当尝试将向量y1减去向量y2时,会抛出错误,因为它们的长度不兼容 当您有多个参数时,应使用mapply而不是lappy: distances <- mapply(algo, x1, y1, SIMPLIFY = F) 下面是一个使用R的sp类的版本: x1 <- c(1,2,4,6,

我的问题分为两部分。我正在寻找R中的解决方案:

第1部分

我有两组(x,y)坐标,我们称之为(x1,y1)和(x2,y2):

x1
lappy(x1,algo,y=y1)
,在
x1
上迭代,但不在
y1
上迭代。当尝试将向量
y1
减去向量
y2
时,会抛出错误,因为它们的长度不兼容

当您有多个参数时,应使用
mapply
而不是
lappy

distances <- mapply(algo, x1, y1, SIMPLIFY = F)

下面是一个使用R的
sp
类的版本:

x1 <- c(1,2,4,6,7)
y1 <- c(5,2,4,7,8)

x2 <- c(5,3,4,2)
y2 <- c(8,1,2,4)

postcode <- c("a", "b", "c", "d")

library(sp)
library(rgeos)

x1 <- SpatialPoints(cbind(x1, y1))
x2 <- SpatialPoints(cbind(x2, y2))

postcode[apply(gDistance(x1, x2, byid = TRUE), 2, which.min)]
## [1] "d" "b" "c" "a" "a"

x1我不认为这有什么意义:邮政编码不是由这一近似值分配的,我正试图这样做。军械测量局为英国的所有邮政编码指定了北距和东距坐标。我有一组北距和东距坐标,它们不能精确地映射到军械测量局的坐标(因为我假设一个邮政编码会跨越多个坐标)。因此,我想根据军械测量局的坐标近似得到最近的邮政编码。感谢您的及时回复-这非常有帮助。为了帮助我进一步理解,为什么Lappy不起作用(除了它对具有多个参数的函数不起作用之外)——Lappy在我的问题中所述的规范中试图做什么?提前谢谢!
postcode <- c("a", "b", "c", "d")
distances <- mapply(algo, x1, y1, SIMPLIFY = F)
algo <- function(x, y)
{
        dist <- which.min(sqrt(((x2 - x)^2) + ((y2 - y)^2)))
}
postcode[mapply(algo, x1, y1, SIMPLIFY = T)]
[1] "d" "b" "c" "a" "a"
x1 <- c(1,2,4,6,7)
y1 <- c(5,2,4,7,8)

x2 <- c(5,3,4,2)
y2 <- c(8,1,2,4)

postcode <- c("a", "b", "c", "d")

library(sp)
library(rgeos)

x1 <- SpatialPoints(cbind(x1, y1))
x2 <- SpatialPoints(cbind(x2, y2))

postcode[apply(gDistance(x1, x2, byid = TRUE), 2, which.min)]
## [1] "d" "b" "c" "a" "a"