R生长度日计算中多个波段上的栅格代数

时间:2018-04-10 15:56:21

标签: r stack raster modeling r-raster

因此,我正在从北美的每日最低和最高温度建立30年平均增长度日光栅。输入数据由60个栅格,30个tmax和30个tmin组成。每个栅格都包含365个频段(每天一个)。 GDD的计算非常简单,只有((tmax-tmin))/2)-10。问题是我似乎无法找到所有波段和光栅一起计算的方法。

我最初的计划是堆叠所有tmin栅格和所有tmax栅格并将它们一起减去。但在这种情况下,只计算第一个波段(第1天)。有没有办法在不必逐个提取所有波段的情况下进行操作。

library(raster)

tmax <- stack("C:/gddtmax")
tmin <- stack("C:/gddtmin")
average <- ((tmax-tmin)/2)-10

1 个答案:

答案 0 :(得分:0)

你的例子适合我。

library(raster)
f <- system.file("external/rlogo.grd", package="raster")
tmax <- brick(f) / 10
tmin <- tmax - 10

tmaxtmin各有三层

avg <- ((tmax-tmin)/2)-10

avg也有三层

avg
#class       : RasterBrick 
#dimensions  : 77, 101, 7777, 3  (nrow, ncol, ncell, nlayers)
#resolution  : 1, 1  (x, y)
#extent      : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=merc +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#data source : in memory
#names       : red, green, blue 
#min values  :  -5,    -5,   -5 
#max values  :  -5,    -5,   -5 

修改 看起来问题是由于内存管理错误(在2.7-3版中修复)。这是两个解决方法。

使用overlay(也允许您指定输出文件名)

avg <- overlay(tmin, tmax, fun=function(x, y){ ((y-x)/2)-10 })

或使用rasterOptions

rasterOptions(todisk=TRUE)
avg <- ((tmax-tmin)/2)-10
rasterOptions(todisk=FALSE)