在netcdf中保存R中的二维数组

时间:2013-09-17 07:10:08

标签: arrays r file netcdf

我想将数据集中的“切片”地图保存到新的netcdf文件中。有问题的代码如下:

library(ncdf)
ncfname <- “cru10min30_tmp.nc”
crutmp <- open.ncdf(ncfname)

tmp.array <- get.var.ncdf(crutmp,"tmp")
close.ncdf(crutmp)
month <- 1
tmp.slice <- tmp.array[,,month]

该数据集位于http://geography.uoregon.edu/GeogR/data/raster/cru10min30_tmp.nc,此代码段取自http://geography.uoregon.edu/GeogR/topics/raster01.htm上的示例。如何将“tmp.slice”二维数组保存为新的netcdf文件?

感谢并告诉我是否需要更多信息来帮助您分析问题。

1 个答案:

答案 0 :(得分:1)

首先需要创建一个新的NetCDF文件,然后将切片添加到新创建的文件中。

从源文件中获取维值:

lat <- get.var.ncdf(crutmp,"lat")
lon <- get.var.ncdf(crutmp,"lon")

使用这些数组来定义尺寸:

Lat <- dim.def.ncdf(name = "lat", units = "m", vals = lat)
Lon <- dim.def.ncdf(name = "lon", units = "m", vals = lon)

沿这些维度定义变量:

mv <- -9999 # missing value
z <- var.def.ncdf(name = "z", units = "m", dim = list(Lat, Lon), prec="double", missval = mv)

现在创建一个包含变量z的新NetCDF文件:

newnc <- create.ncdf(filename = "tmp_slice.nc", vars = list(z))         

将时间切片值(tmp.slice)放在变量z:

put.var.ncdf(nc = newnc, varid = "z", vals = tmp.slice, start = c(1,1), count = c(-1,-1))

关闭新创建的NetCDF文件,将其写入磁盘:

close.ncdf(newnc)