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