Answers:
软件包FNN中的函数get.knnx可以计算点模式中的N个最近邻居。
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
现在nn $ nn.index是一个矩阵,这样nn $ nn.index [i,j]是x2中第i行中两个最接近的邻居中x1中的行-排序为最接近[i,1],并且下一个邻居是[i,2]。
该函数还会为您返回距离,并具有一些选项来计算空间索引以进行快速搜索。
我刚刚发现,spatstat有crossdist功能。
描述
计算从两个不同的数据集中获取的“事物”对之间的距离。
它以两个点模式X和Y作为输入,并返回其[i,j]项是X [i]到Y [j]的距离的矩阵。要使用crossdist获得第二近的邻居:
xdistances <- crossdist(X, Y) #Get all cross distances
nn = numeric()
for (i in 1:nrow(X)) {
xdistance <- sort(xdistances[i,], partial=2)[2]
nn <- append(nn, xdistance)
}
我知道我已经接受了Spacedman的回答,但是我想分享一下我是怎么做的。
该功能nndist
在spatstat
包有一个参数k
,用于确定邻居的顺序。要获取第二近邻距离,请使用k=2
。要同时获得第一个和第二个邻居,请使用k=1:2
。