【问题标题】:How to pass multiple function in raster::extract()如何在 raster::extract() 中传递多个函数
【发布时间】:2018-12-12 20:16:25
【问题描述】:

我正在使用光栅 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 上的第一个问题,如有不当之处,我深表歉意

【问题讨论】:

  • 也许更简洁的方法是编写一个函数来调用每个提取调用并返回所有结果的列表

标签: r parallel-processing extract


【解决方案1】:

正如@dww 上面在 cmets 中建议的那样,这里有一个函数,它计算一些汇总统计数据并将它们作为向量返回。它被传递给raster::extractfun 参数。请注意,raster::extract 的文档说该函数必须接受 na.rm 参数。我无法更改 extract 的默认行为来命名数据框输出的列,因此我随后手动设置了名称。

代码

my_summary <- function(x, na.rm) c(mean = mean(x, na.rm=na.rm), min = min(x, na.rm=na.rm), max = max(x, na.rm=na.rm))
r_summary <- extract(r, polys, fun = my_summary, df = TRUE)
names(r_summary) <- c('ID', 'mean', 'min', 'max')

输出

  ID     mean min max
1  1 387.8158 326 507
2  2 321.0800 172 498

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2020-12-15
    • 1970-01-01
    • 2021-10-19
    • 2020-07-25
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    相关资源
    最近更新 更多