申请系列

时间:2015-10-27 21:34:24

标签: r list apply lapply r-raster

我正在尝试使用ex1系列从一系列栅格(ex2)中提取两个地区exlistrasterlistapply)来自栅格包的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。它所做的解决方案需要成为申请系列的成员(尽管这是我自己设定的任务),如果有更好,更快,更优雅的方式请分享。

1 个答案:

答案 0 :(得分:1)

您可以从将区域组合到单个SpatialPolygons对象(可能它们是以?开头)开始。您的示例数据可以像这样完成:

>>> gzip.compress('same'.encode('ascii'))
b'\x1f\x8b\x08\x00\xe2\x0e0V\x02\xff+N\xccM\x05\x00D\xf1P\xfc\x04\x00\x00\x00'
>>> gzip.compress('same'.encode('ascii'))
b'\x1f\x8b\x08\x00\xe3\x0e0V\x02\xff+N\xccM\x05\x00D\xf1P\xfc\x04\x00\x00\x00'

在此示例中(使用可堆叠的RasterLayer对象),您可以执行

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