为什么要用函数calc和stack来做栅格计算?这比直接使用我们的愿望函数更好吗?
Why do we use function calc and stack to do raster calculation? Is that better than using our desire function directly?
最近需要计算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)
谁能解释一下使用 calc
和 stack
而不是直接使用 mean
函数的优势?据我所知,我们可以直接操作相同分辨率和扩展的栅格数据。
2021.7.10 编辑。我重写了第二种方法来纠正一些错误。
总是请包含一些示例数据
library(raster)
b <- stack(system.file("external/rlogo.grd", package="raster"))
这两个语句是等价的
x <- mean(b)
y <- calc(b, mean)
但是calc
有一个文件名参数,因此您可以一步将结果保存到磁盘。
calc
在处理大型栅格和更复杂的函数时特别有利。例如
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
的公式,但这没有任何意义,也不起作用。
最近需要计算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)
谁能解释一下使用 calc
和 stack
而不是直接使用 mean
函数的优势?据我所知,我们可以直接操作相同分辨率和扩展的栅格数据。
2021.7.10 编辑。我重写了第二种方法来纠正一些错误。
总是请包含一些示例数据
library(raster)
b <- stack(system.file("external/rlogo.grd", package="raster"))
这两个语句是等价的
x <- mean(b)
y <- calc(b, mean)
但是calc
有一个文件名参数,因此您可以一步将结果保存到磁盘。
calc
在处理大型栅格和更复杂的函数时特别有利。例如
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
的公式,但这没有任何意义,也不起作用。