我正在使用由20层组成的数据集,这些数据集堆叠在RasterBrick中(源自数组)。我已经研究了通过“ calc”和“ cellStats”计算得出的层的总和。我已使用calc计算总值的总和,并使用cellStats查看每层值的平均值(对于时间序列很有用)。但是,当我对每一层的平均值求和时,它是其他计算得出的总和的一半。是什么原因导致这种差异?我在俯视什么?
代码如下:
testarray <- runif(54214776,0,1)
# Although testarray should contain a raster of 127x147 with 2904 time layers.
# Not really sure how to create that yet.
for (i in 1830:1849){
slice<-array2[,,i]
r <- raster(nrow=(127*5), ncol=(147*5), resolution =5, ext=ext1, vals=slice)
x <- stack(x , r)
}
brickhp2 <- brick(x)
r_sumhp2 <- calc(brickhp2, sum, na.rm=TRUE)
r_sumhp2[r_sumhp2<= 0] <- NA
SWEavgpertimestepM <- cellStats(brickhp2, stat='mean', na.rm=TRUE)
目的是将用“ calc(x,sum)”计算的层的总和与用“ cellStats(x,mean)”计算的平均值的总和进行比较。
Rasterbrick看起来像这样(600kb,GTiff):http : //www.filedropper.com/brickhp2 *如果有更好的共享方式,请告诉我。
使用时会产生混淆,它会calc
在砖块上按像素进行操作(即,对每个像素的20个值执行计算并返回一个栅格图层),cellStats
并对每个栅格图层分别执行计算并返回一个栅格值每层。如果使用以下代码,则可以看到结果是可比的:
library(raster)
##set seed so you get the same runif vals
set.seed(999)
##create example rasters
ls=list()
for (i in 1:20){
r <- raster(nrow=(127*5), ncol=(147*5), vals=runif(127*5*147*5))
ls[[i]] <- r
}
##create raster brick
brickhp2 <- brick(ls)
##calc sum (pixel-wise)
r_sumhp2 <- calc(brickhp2, sum, na.rm=TRUE)
r_sumhp2 ##returns raster layer
##calc mean (layer-wise)
r_meanhp2 <- cellStats(brickhp2, stat='mean', na.rm=TRUE)
r_meanhp2 ##returns vector of length nlayers(brickhp2)
##to get equivalent values you need to divide r_sumhp2 by the number of layers
##and then calculate the mean
cellStats(r_sumhp2/nlayers(brickhp2),stat="mean")
[1] 0.4999381
##and for r_meanhp2 you need to calculate the mean of the means
mean(r_meanhp2)
[1] 0.4999381
您需要自己确定是否要在应用程序中使用像素或逐层结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句