【发布时间】:2014-08-29 15:38:24
【问题描述】:
我正在尝试查找一组栅格满足特定条件的连续天数。在这种情况下,我想弄清楚一年中每个 30 天是否有连续 10 天没有下雨。
因为我正在使用大量数据,所以我需要想出一种有效的方法来做到这一点。即试图避免在所有光栅单元中使用循环。
我找到了一个可能使事情变得更简单的函数,但我不知道如何将它有效地应用于所有栅格单元。这是一个如何轻松完成的示例。这是一种非常快速地计算连续 TRUE 数量的方法。
z =3
现在的问题是如何(如果可能)有效地将其应用于所有单元格。堆栈应用?计算?不确定。
这里有一个示例栅格堆栈以提供帮助:
set.seed(42)
require(raster)
r1 <- raster(nrows=10, ncols=10)
r2=r3=r4=r5=r1
r1[]= runif(ncell(r1))
r2[]= runif(ncell(r1))
r3[]= runif(ncell(r1))
r4[]= runif(ncell(r1))
r5[]= runif(ncell(r1))
rs=stack(r1,r2,r3,r4,r5)<.25
【问题讨论】:
-
你为什么使用
raster对象而不是简单的矩阵(或3Darrays,如果需要)?除此之外,您是将一年分为 12 个不相交的 30 天区块,还是要对每个 30 天序列进行滚动测试? -
它们以 .tif 文件的形式读入,因此将它们保留为光栅堆栈似乎很自然(只是一个多维数组),但愿意切换。最终,我将让它每 30 天滚动一次。
-
我将其保留为栅格,但使用提取循环遍历单元格。
-
使用
calc(rs, fun)其中 fun 是您的函数(适用于向量值,代表单个单元格