有几种方法可以解决这个问题,但可能最简单的方法是识别多边形索引的所有组合(对),并将 gDistance
应用于每个组合。
以下是一个示例,使用 maptools
中包含的 wrdl_simpl
数据集,计算非洲所有国家之间的豪斯多夫距离。
library(maptools)
data(wrld_simpl)
africa <- spTransform(subset(wrld_simpl, REGION==2),
CRS('+proj=eqc +lon_0=20.390625'))
combns <- t(combn(length(africa), 2))
africa.split <- split(africa, seq_len(length(africa)))
dists <- apply(combns, 1, function(x)
gDistance(africa.split[[x[1]]], africa.split[[x[2]]], hausdorff=TRUE))
您可以将这些结果绑定到组合矩阵中以方便处理:
hdists <- cbind.data.frame(from=as.character(africa$NAME[combns[, 1]]),
to=as.character(africa$NAME[combns[, 2]]),
d=dists)
head(hdists)
另一种方法是使用outer
,但这样做效率可能会较低,因为它会计算所有距离两次(但它可以直接返回距离矩阵,这可能是可取的)。
outer(africa.split, africa.split, FUN = Vectorize(function(x, y)
gDistance(x, y, hausdorff=TRUE)))
(更新一个例子)
wrld_simpl
数据集,因为它在R中很容易获取,因此易于再现。你为什么不试试用你的数据,如果不行再评论呢? - jbaumsdim(combns)
和length(dists)
是什么? - jbaums