2

我正在尝试测量雏鸟从原来的巢址移动到他们第二年建立的领地的距离。我想使用 spatstat 包来执行此操作,但我在输出的某些功能(例如,nncross、nndist、crossdist)时遇到了问题。这是我的代码的样子,数据在这里:https ://sites.google.com/site/datastackoverflow/shapefiles

library(raster)
library(spatstat)
library(maptools)

# read in shapefile with nest locations (UTMs) and convert to ppp format:
nests <- readShapeSpatial("nest_locs.shp")
X<-as.ppp(nests)
X

# read in shapefile with juvenile locations (UTMs) and convert to ppp format:
juvs <- readShapeSpatial("juv_locs.shp")
Y<-as.ppp(juvs)
Y

# calculate the distance between nest points and juveniles:
N<-nncross(X,Y)
N

# another option
crossdist(X, Y)

结果如下所示:

> crossdist(X, Y)
     [,1]     [,2]
[1,] 2756.546 1994.002
[2,] 3831.429 3466.360

是否可以保留点 ID,在这种情况下是 nestID 和相应的birdID,而不是行号和列号?

4

3 回答 3

1

“ID”是隐含的,这在 R 中很常见:行的顺序与 相同X,列的顺序为Y。你可以做

z <- crossdist(X, Y) 
rownames(z) <- X$nestID 
colnames(z) <- Y$birdID 

您也可以为此使用 raster::pointDistance。

于 2016-01-18T22:45:36.857 回答
0

只是为了澄清:

  • crossdist(X,Y) 计算从 的每个X到 的每个点的距离,Y并返回一个距离矩阵d,即从到d[i,j]的距离。的点对应于 的行。的点对应于 的列。X[i]Y[j]XdYd

  • nncross(X,Y)为每个点查找 中X[i]的最近点Y,默认情况下,返回到该最近点的距离 ( $dist[i]) 和最近点的序列号 ( $which[i])。也就是说,$which[i]=j如果 的最近邻X[i]Y[j]。如果点Y具有其他属性,如 ID 字符串,只需使用序列号 ( $which) 提取相关条目。

  • nndist(X)nnwhich(X)在单点模式上进行操作X。他们在同一点模式中X[i]为每个点找到最近的邻居,比如在哪里。然后返回索引,同时返回距离。X[j]j != innwhichjnndist

于 2016-01-20T00:40:11.407 回答
0

crossdist您的情况下,@RobertH 的答案涵盖了您。该函数为nncross每个鸟巢 ( X)找到Y离该鸟巢最近的鸟 ( )。最近的鸟类的索引在标记为的列whichN。您应该能够将其转换为birdID这样的(我还没有运行代码,所以它未经测试):

N$which <- Y$birdID[N$which]
于 2016-01-19T08:47:18.770 回答