查找栅格砖块中的哪些单元格包含任何图层中的数据
Find which cells in raster brick contain data in any layer
我有一些大的网格化全球数据栅格块。我想逐个单元地执行一些计算要求很高的计算。为了减少计算负载,我想 运行 仅在至少包含砖块一层中数据的栅格单元上建立模型。但是我如何有效地找到包含一些数据的单元格呢?我知道我可以用一个循环来做。像这样:
1st 一些可重现的数据:
library(raster)
r.list = vector("list", 20)
set.seed(123)
for (i in 1:20) {
r.list[[i]] = raster(vals = sample(c(rep(NA,10),1), 100, TRUE), nrows = 10, ncols = 10, ext = extent(c(0,25,0,25)))
}
r.brick = brick(r.list)
现在我们循环遍历砖块的每一层以查找哪些单元格有一些数据:
has.data.list = vector("list", 20)
for (i in 1:20) {
has.data.list[[i]] = which(!is.na(values(raster(r.brick, layer=i))))
}
has.data = sort(unique(unlist(has.data.list)))
但这有点不雅。是否有一种规范/有效的方法来获取包含一些数据的单元格向量?
一个可能的技巧是利用以下事实:如果您指定 na.rm = 真。
因此,您可以计算光栅块的最大值,并检查它与 NA 不同的地方。类似于:
has.data = which(!is.na(getValues(max(r.brick, na.rm=TRUE))))
has.data
1 2 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 33 34 35 37 38 39 40
41 42 44 46 47 48 49 50 51 52 53 54 55 56 57 59 60 61
62 64 66 67 68 69 70 71 74 75 76 77 78 79 80 82 83 85
86 87 89 90 91 92 93 95 96 97 98 99 100
我有一些大的网格化全球数据栅格块。我想逐个单元地执行一些计算要求很高的计算。为了减少计算负载,我想 运行 仅在至少包含砖块一层中数据的栅格单元上建立模型。但是我如何有效地找到包含一些数据的单元格呢?我知道我可以用一个循环来做。像这样:
1st 一些可重现的数据:
library(raster)
r.list = vector("list", 20)
set.seed(123)
for (i in 1:20) {
r.list[[i]] = raster(vals = sample(c(rep(NA,10),1), 100, TRUE), nrows = 10, ncols = 10, ext = extent(c(0,25,0,25)))
}
r.brick = brick(r.list)
现在我们循环遍历砖块的每一层以查找哪些单元格有一些数据:
has.data.list = vector("list", 20)
for (i in 1:20) {
has.data.list[[i]] = which(!is.na(values(raster(r.brick, layer=i))))
}
has.data = sort(unique(unlist(has.data.list)))
但这有点不雅。是否有一种规范/有效的方法来获取包含一些数据的单元格向量?
一个可能的技巧是利用以下事实:如果您指定 na.rm = 真。
因此,您可以计算光栅块的最大值,并检查它与 NA 不同的地方。类似于:
has.data = which(!is.na(getValues(max(r.brick, na.rm=TRUE))))
has.data
1 2 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 37 38 39 40 41 42 44 46 47 48 49 50 51 52 53 54 55 56 57 59 60 61 62 64 66 67 68 69 70 71 74 75 76 77 78 79 80 82 83 85 86 87 89 90 91 92 93 95 96 97 98 99 100