为什么 terra package 在使用 extract 函数时会丢弃这些值?

Why is terra package dropping these values when using extract function?

我使用 terra 包从光栅文件中提取农药应用。在提取步骤中,似乎 terra 删除了一些行。在此示例中,有 19 个警告:

计算失败min/max,采样中未找到有效像素。 (GDAL 错误 1)

在提取步骤之后,我剩下的行数减少了,而且似乎删除了一些行数。

这一步使用光栅效果很好(从这里 ),但不幸的是,考虑到我需要处理的文件数量,速度变慢了。

知道此错误的含义以及解决方法吗?

代码如下:

## Terra ----

data(wrld_simpl)

## Need to create a SparVector for terra
wrld_simpl = vect(wrld_simpl)

r <- terra::rast("https://raw.github.com/hansronald/Pesticide-data/master/APR_Soybean_Glyphosate_2015_L.tif")

## Remove 
r <- terra::clamp(r, lower=0, values=FALSE)

# area is in ha (values in raster are kg / ha per year)
a <- terra::area(r, sum=FALSE, mask=TRUE) * 0.0001

## Get the total area that pesticide has been applied to
tot_area <- terra::extract(a, wrld_simpl, fun = sum, na.rm = TRUE)

## Calculate total application in each cell
rtot  <- r * a

## Calculate total application in each country
tot_app  <- terra::extract(rtot, wrld_simpl, fun = sum, na.rm = TRUE)

## Mean application rate in each country
mean_app <- terra::extract(r, wrld_simpl, fun = mean, na.rm = TRUE)

## Save data to corresponding country
world_data = data.frame(wrld_simpl$NAME, wrld_simpl$ISO3)
world_data = data.frame(world_data, mean_app, tot_app, tot_area)

发生这种情况是因为某些多边形太小以至于无法覆盖栅格像元。这已经在 development version (terra >= 1.2.8) 中得到修复;但这是使用 exactrextractr 包的另一种方法 --- 这种方法速度很快,可以为您提供非常精确的估计,当您的栅格像元相对较大时(尽管 wrld_simpl相当不精确)。

library(raster)
library(sf)
library(exactextractr)
ra <- raster(a)
wsf = st_as_sf(wrld_simpl)
e <- exact_extract(ra, wsf, "sum")