不使用adehabitat mcp的R MCP估计多个点

时间:2019-02-06 13:08:29

标签: r geospatial

我正在尝试估计从缓冲点创建的mcp的重叠。我有多个动物,我想知道mcps有多少重叠。

我没有使用adehabitat的mcp,因为对于某些动物我只有很少的分数。我可以制作单个的mcp,并且可以逐案计算其他动物的重叠量,但是我一直在努力将其捆绑在一起,以便可以例如计算几只动物的mcp重叠量。最后,这将是计算不同数量动物的起始范围重叠的函数的一部分。我感觉我缺少了lapply的一些简单功能。

下面的示例代码:

#create dummy dataset
set.seed(1)
data.frame(X = rpois(n = 20,30), Y = rpois(20,10), ID = c(rep("A",3), rep("B",5), rep("C", 1), rep("D",1), rep("E", 10) ))->relocs

#add a buffer 
id <- factor(relocs$ID)
xy <- as.data.frame(coordinates(relocs[1:2]))
r <- split(xy, id) #now have a list of each "id" and its relocations

#with the following code I can extract the ids, make the buffers and calculate the mcps

i<-1
idr<-data.frame(ID = rep(names(r[i]),nrow(r[i][[1]][1:2])))
coordinates(idr)<-r[i][[1]][1:2]
buf<-gBuffer(idr, width = 5) #plot a buffer 
mcpr<-gConvexHull(buf) #creates the mcp

我想我现在想做的就是在我的列表中套用这个,以获得每个ID的mcps列表,然后我想覆盖比较所有可能的二元组以计算MCP重叠。但是我在最后这些方面遇到了问题。

当我不高兴地尝试时,我认为我的格式设置有误(取自adehabitat mcp函数内部)

res <- SpatialPolygons(lapply(1:length(r), function(i) {
idr<-data.frame(ID = rep(names(r[i]),nrow(r[i][[1]][1:2])))
coordinates(idr)<-r[i][[1]][1:2]
buf<-gBuffer(idr, width = 5) #plot a buffer 
mcpr<-gConvexHull(buf) #creates the mcp
return(mcpr)
}))

给我错误消息“该类“ SpatialPolygons”的对象的名称为“ area”的空位”

我尝试遵循此问题here,但似乎语法不正确。我认为是因为我无法正确列出mcp多边形的列表。任何帮助深表感谢!

0 个答案:

没有答案