我想从下面的3.nc文件中获得叶绿素a的平均值,我想知道使用马赛克是否正确?
https://oceandata.sci.gsfc.nasa.gov/cgi/getfile/AQUA_MODIS.20020101_20021231.L3m.YR.NSST.sst.4km.nchttps://oceandata.sci.gsfc.nasa.gov/cgi/getfile/AQUA_MODIS.20030101_20031231.L3m.YR.NSST.sst.4km.nchttps://oceandata.sci.gsfc.nasa.gov/cgi/getfile/AQUA_MODIS.20040101_20041231.L3m.YR.NSST.sst.4km.nc
#List of .nc files in directory
fls <- list.files("/folder/with/files", ".nc$", full.names = TRUE)
#list of rast objects
r_list <- lapply(fls, rast)
#create spatial raster collection
coll <- sprc(r_list)
#Get the mean values across all rasters
chla_m<-mosaic(coll, fun="mean")
2条答案
按热度按时间s4chpxco1#
可以使用以下代码
zynd9foi2#
terra::mosaic()
用于在空间上合并一组光栅。在重叠的单元格中,您可以应用一个函数来确定要将单元格设置为的值,默认值为mean
。所以,是的,你的方法会起作用,但效率非常低。在
R
中,你可以这样做:如果需要,可以将
sst
矩阵转换为terra
SpatRaster
。这段代码可以满足你的所有需求,非常高效。
内存限制
如果您必须以这种方式合并许多文件,或者使用不同的数据集,其维度更大,则可能会遇到内存问题,这将极大地减慢该过程。如果是这种情况,请使用循环。循环开销与其余代码(主要是阅读数据)相比将完全相形见绌。
这里的技巧是,没有比两个矩阵更大的内存需求了:
data
对象和ncvar_get()
读入的数据。