为啥 terra 包在使用提取功能时会删除这些值?
Posted
技术标签:
【中文标题】为啥 terra 包在使用提取功能时会删除这些值?【英文标题】:Why is terra package dropping these values when using extract function?为什么 terra 包在使用提取功能时会删除这些值? 【发布时间】:2021-07-30 19:01:03 【问题描述】:我使用 terra 包从光栅文件中提取农药应用。在提取步骤中,似乎 terra 删除了一些行。在此示例中,有 19 个警告:
无法计算最小值/最大值,在采样中找不到有效像素。 (GDAL 错误 1)
在提取步骤之后,我剩下的行数减少了,而且似乎删除了一些行。
这一步使用光栅(从这里Using raster to calculate the mean application and total application of pesticides, but numbers not adding up)运行良好,但不幸的是,考虑到我需要处理的文件数量,它会减慢速度。
您知道这个错误是什么意思以及如何解决吗?
代码如下:
## 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)
【问题讨论】:
【参考方案1】:发生这种情况是因为某些多边形太小以至于它们无法覆盖栅格单元。这已在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")
【讨论】:
这非常快,谢谢。你知道在exact_exctract 中是否有na.rm = TRUE 的替代方案?你能推荐一张更精确的世界地图吗? (不必非常精确)以上是关于为啥 terra 包在使用提取功能时会删除这些值?的主要内容,如果未能解决你的问题,请参考以下文章
了解 raster::extract 和 terra:extract