【发布时间】:2017-01-13 17:13:40
【问题描述】:
我想通过将这些图层与另一个栅格相乘来修改栅格砖中的一部分图层。
例如,如果我们有一个名为“r.brick”的栅格砖,我们尝试将其层 2:4 乘以具有相同行和列尺寸的栅格“r.mult”:
r.brick[[2:4]]按预期返回层 2:4r.brick[[2:4]] * r.mult按预期成功地增加了这些层
但是,如果我尝试将结果分配回子集层,则会出现错误
r.brick[[2:4]] = r.brick[[2:4]] * r.mult
# Error in value[] <- val :
# incompatible types (from S4 to double) in subassignment type fix
错误消息表明分配正在尝试分配栅格值,而不是栅格本身。但是如果我尝试使用getValues 分配,我会得到一个不同的错误:
r.brick[[2:4]] = getValues(r.brick[[2:4]] * r.mult)
# Error in .local(x, values, ...) : length(values) is not equal to ncell(x)
这样做的正确方法是什么?
一些可重现的数据:
library(raster)
r.list = vector("list", 20)
set.seed(123)
for (i in 1:20) {
r.list[[i]] = raster(vals=runif(100), nrows=10, ncols=10, ext=extent(c(0,25,0,25)))
}
r.brick = brick(r.list)
r.mult = raster(vals=sample(2,100,T), nrows=10, ncols=10, ext=extent(c(0,25,0,25)))
【问题讨论】:
-
您尝试过使用 setValues 吗? (不知道它是否允许在多个层上分配,虽然...)
-
@LorenzoBusetto setValues 似乎只适用于单层,据我所知。