r-使用exactextractr进行光栅提取-给出自己的函数会导致错误



我使用光栅包(raster::extract(根据自己的函数mean_condition计算均值(见下文(,它很有效。

我想尝试使用exactextractr::exact_extract来提取相同的内容,因为我了解到它更高效,完成速度更快。然而,它给了我一个错误,我并不完全理解。如果有人在这个错误上帮助我,我将不胜感激

Mean_condition <- function(x,...) {
if ((length(x[is.na(x)])/length(x)) >= 0.5)
{
return(9999)
}
else
return(mean(x))
}
Region1_mean <- raster::extract(raster, Regionshp, fun=Mean_condition, na.rm=TRUE, df=TRUE)

使用exactextractr:

Region1_mean <- exactextractr::exact_extract(raster, Regionshp, fun=Mean_condition, na.rm=TRUE)

.exact_extract(x,sf::st_as_sf(y(,…(中出错:exact_extract是用一个看起来不是function(values, coverage_fractions, ...)形式的函数调用的。如果summary函数应接受单个数据帧参数,请设置summarize_df = TRUE。此外:警告消息:在.exexact_extract(x,sf::st_as_sf(y(,…(中:多边形转换为光栅CRS(EPSG:NA(

这样的东西怎么样:

library(raster)
library(sf)
library(exactextractr)
rast <- raster::raster(matrix(1:100, ncol=10), xmn=0, ymn=0, xmx=10, ymx=10)
poly <- sf::st_as_sfc('POLYGON ((2 2, 7 6, 4 9, 2 2))')
Mean_condition <- function(rast,poly) {
if ((length(x[is.na(x)]) / length(x)) >= 0.5){
return(9999)
}
else{
Region1_mean <- exactextractr::exact_extract(rast, poly, fun="mean")
}
return(Region1_mean)
}
Mean_condition(rast,poly)

由于必须计算平均值,因此应该依靠更高效的内置汇总操作(如mean(,而不是构建用户定义的函数,后者速度较慢。根据功能描述:

在可能的情况下,这种方法[使用预定义的摘要操作]是有利的,因为它允许包增量计算统计信息,避免了同时将所有像素值存储在内存中的需要。这允许包用少量内存处理任意大的数据。

此外,请注意,您的错误是由于函数描述中缺少参数summarize_df = TRUE.造成的:

编写摘要函数的最简单方法是设置参数summaryze_df=真。(为了向后兼容性,这不是默认值。(在此模式中,summary函数获取签名函数(df,…(,其中df是与由exact_extract返回,fun=NULL。

如果summary_df=FALSE,则函数必须具有签名未使用权重时的函数(值、覆盖率分数…(

最新更新