r-为什么我们使用函数calc和stack来进行光栅计算?这比直接使用我们的欲望函数好吗



最近,我需要计算12个世界气候光栅层的平均值。我们有两种方法可以做。第一种更直接:

mean.layer <- mean(L1, L2,......,L12) # L1 means the first layer

mean.layer <- (L1+L2+......+L12)/12

另一个对我来说是新的:

layer.stack <- stack(L1,L2,......,L12)
mean.layer <- calc(layer.stack, mean, na.rm = T)

有人能解释一下使用calcstack而不是直接使用mean函数的优点吗?据我所知,我们可以直接以相同的分辨率和扩展操作光栅数据。


2021.7.10编辑。我重写了第二种方法来纠正一些打字错误。

请始终包含一些示例数据

library(raster)
b <- stack(system.file("external/rlogo.grd", package="raster"))

这两种说法是等价的

x <- mean(b)
y <- calc(b, mean)

但是calc有一个文件名参数,所以您可以一步将结果保存到磁盘。

CCD_ 5在处理大型光栅和更复杂的函数时尤其有利。例如

z1 <- calc(b, function(i) 100 - sqrt(mean(i + 10)))

相当于这个

z2 <- 100 - sqrt(mean(b + 10))

但后者可能需要写入4个临时文件来存储值,而前者只需要1个这样的文件。

你应该避免这样的方法来获得平均值

mean.layer <- (L1+L2+......+L12)/12

它编写起来很麻烦,容易出错,而且不可扩展(想象一下,为1200个光栅执行此操作!(。

我不知道你在问题中从哪里找到了calc的配方,但这毫无意义,也不起作用。

相关内容

最新更新