您可以这样做(使用稍作修改的示例以更容易查看发生的情况):
library(terra)
s <- rast(ncols=10, nrows=10)
s <- init(s, 1:10)
v <- c(1, 10, 100, 1000)
a <- app(s, function(x, aa){ sapply(aa, function(i) 2 * i/x) }, aa=v)
a
#class : SpatRaster
#dimensions : 10, 10, 3 (nrow, ncol, nlyr)
#resolution : 36, 18 (x, y)
#extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +no_defs
#source : memory
#names : lyr.1, lyr.2, lyr.3
#min values : 0.2, 2.0, 20.0
#max values : 2, 20, 200
使用terra
1.3-17 版(目前是开发版),您现在还可以执行以下操作:
b <- 2 * v/s
得到相同的结果。当使用比层数长的向量进行算术运算时,SpatRaster 的层会被回收。
使用 SpatRasterDataSet,您可以执行以下操作。fun
在外部进行测试lapp
以查看返回的值的数量及其顺序是否有意义是很重要的。
fun = function(i, j) {
v <- c(1, 10, 100, 1000)
f <- i + j
f <- rep(f, each=length(v))
matrix(v / f, ncol=length(v), byrow=TRUE)
}
srd <- sds(list(i = s, j = s/10))
r <- lapp(srd, fun = fun)