apply family 中的两个列表

Two lists in apply family

我正在尝试使用 apply 从栅格列表 (rasterlist) 中提取两个区域 ex1ex2(在 exlist 中) family 和 extract 来自光栅包。我可以使用嵌套的 for 循环,但想知道是否有一种方法可以通过其中一个 apply 系列成员实现这一点,因为嵌套的 for 循环被认为是 more or less bad practice in R。这里是虚拟代码:

library(raster)
ras1 <- raster(matrix(runif(20), nrow = 5, ncol = 5))
ras2 <- ras1 * 2
ras3 <- ras1 * 0.5
rasterlist <- list(ras1, ras2, ras3)
ex1 <- extent(0, 0.4, 0, 0.4)
ex2 <- extent(0.6, 1, 0.4, 1)
exlist <- list(ex1, ex2)

目前我将其作为(相当不满意的)解决方案:

out1 <- lapply(rasterlist, function(i) extract(i, ex1))
out2 <- lapply(rasterlist, function(i) extract(i, ex2))

N.B。它做的解决方案不需要 apply家族的一员(虽然那是我给自己定的任务)如果有更好、更快、更优雅的方式请分享。

您可以先将这些区域组合成一个 SpatialPolygons 对象(也许它们是开始的?)。使用您的示例数据可以这样做:

ex <- do.call(bind, sapply(exlist, function(x) as(x, 'SpatialPolygons')))

在这个例子中(使用可以堆叠的 RasterLayer 对象)你可以做

s <- stack(rasterlist)
extract(s, ex)