我正在使用一个栅格CHM,我必须从一个多边形shapefile中提取几个指标,现在我正在做这样的事情:
library(raster)
library(sp)
#from the help page of extract
r <- raster(ncol=36, nrow=18, vals=1:(18*36))
cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20))
cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0))
polys <- spPolygons(cds1, cds2)
#metrics extraction
mean <- extract(r, polys,mean,df=T)
min<-extract(r, polys,min,df=T)
max<-extract(r, polys,max,df=T)
#and so on for other summary functions (like sd, mode, median, sum etc...)
我想知道是否有一种方法可以将所有的汇总函数传递给extract()函数的fun=参数,以及是否有可能并行执行。
注:这是我在StackOverflow中的第一个问题,我为任何不当之处道歉
3条答案
按热度按时间vs3odd8k1#
我一直在想,在一个提取调用中运行多个函数是否更快,而且确实如此。
下面是Elia的示例和qdread使用
terra
包和microbenchmark
评估的答案。第二个选项几乎快三倍:评价:
ht4b089n2#
这个问题已经过去了很多年,我认为对“Gerald”的答案进行一些扩展会有所帮助。在写这篇文章的时候,到目前为止,最好的解决方案是
exactextractr
包中的exact_extract
函数。该函数可以接受函数的字符向量作为fun
参数。exact_extract
考虑了每个单元的面积被多边形覆盖的部分,并且其被优化以与sf
对象和大SpatRaster
对象以及Raster*
对象一起工作。下面是一个示例,显示了栅格比原始示例更大时的可伸缩性
具有更大光栅的基准:
结果如下:
可以看出,C方法比其他两种方法快得多
ni65a41a3#
正如@dww在上面的评论中所建议的,下面是一个函数,它计算一些汇总统计数据,并将它们作为向量返回。它被传递给
raster::extract
的fun
参数。请注意,raster::extract
的文档说明该函数必须接受na.rm
参数。我无法更改extract
命名数据框输出列的默认行为,因此我在以后手动设置名称。代码
输出