如何将信息附加到 R 中 netCDF 文件中的数组

Posted

技术标签:

【中文标题】如何将信息附加到 R 中 netCDF 文件中的数组【英文标题】:How to append information to an array in a netCDF file in R 【发布时间】:2014-04-15 10:20:36 【问题描述】:

这是我潜伏了很长时间后第一次在***上发帖,所以请温柔:)

我正在使用 R 语言处理一个大型气候数据集,该数据集分布在许多文件中,一次对这些文件执行一个分析。每个文件都有完全相同的数据,只是在不同的时间(每个文件大约 6 个月的数据)。在分析每个文件后,我在坐标(经度、纬度、高度、时间)处输出压力值的多维数组。

然后我想将这些数组保存到一个 netCDF 文件中,但是因为每个文件中的数据是相同的但在时间上是分开的,所以我最终希望将输出的数组连接到 netCDF 中的一个大数组中,即每个文件都将新数据添加到 netCDF 文件中已存在的数组中。

虽然我可以对第一个文件执行此分析,但创建 netCDF 文件并将数组写入其中绝对没问题,但当我尝试将后续文件中的数据附加到它返回的 netCDF 文件时

R_nc_inq_varndims 中的错误:NetCDF:不是有效的 ID

varndims.ncdf(nc, varid) 中的错误:从 C 调用返回的错误

最初我在创建 netCDF 文件时使用

t <- dim.def.ncdf("Time","Hours since January 1st 1901",seq(time[1],time[ntime],24),unlim=TRUE)
latitude <- dim.def.ncdf("Latitude","Degrees",seq(90,-90,-3))
longitude <- dim.def.ncdf("Longitude","Degrees",seq(0,359.25,3))
h <- dim.def.ncdf("Geopotential Height",'km',seq(1,30))

定义变量本身

pressvar <- var.def.ncdf("Pressure", "hPa", list(longitude,latitude,h,t), longname="Pressure at set geopotential heights", missval=-999,prec="double")

然后创建文件并添加数据

ncnew <- create.ncdf(new.name, pressvar)
starting <- c(1,1,1,1)
ending <- c(nlon, nlat, 30, ntime)
put.var.ncdf(ncnew, pressvar, pressure, start = starting,  count = ending)
close.ncdf(ncnew)

正如我所说,一切正常。然后我打开下一个文件,重复分析并生成我的压力数组,打开原始 netCDF 文件并

put.var.ncdf(ncnew, pressvar, pressure, start = c(1,1,1,time[1]), count = c(nlon,nlat,30,time[ntime]))

变量 time 和 ntime 已从第二个文件中读取。我认为问题在于我对 start 和 count 函数的使用,或者我尝试使用无限时间维度,或者甚至可能认为这是可能的。我是否需要为每个文件重新定义维度 t 和变量 pressvar?或者这是否会导致将第二个同名变量保存到 netCDF 文件中?正如你可能会说的那样,我已经被这个小结打了个结。

任何帮助表示赞赏。谢谢!

【问题讨论】:

似乎put.var.ncdf 在您的 NetCDF 文件中找不到变量。尝试将最后一行更改为put.var.ncdf(nc = ncnew, varid = 'Pressure', vals = pressure, start = c(1,1,1,time[1]), count = c(nlon,nlat,30,time[ntime]))。这给了你什么? @koekenbakker 似乎成功了!我知道这会很简单,非常感谢:) 没问题,有些事情发生在我身上很多次。我会发表我的评论作为答案,如果你能勾选接受,我会很高兴:) 【参考方案1】:

似乎put.var.ncdf 在您的 NetCDF 文件中找不到变量。尝试将最后一行更改为:

put.var.ncdf(nc = ncnew, varid = 'Pressure', vals = pressure, start = c(1,1,1,time[1]),  count = c(nlon,nlat,30,time[ntime]))

现在varid 正确引用了NetCDF 文件中的变量名,而不是引用var.def.ncdf 创建的对象。

【讨论】:

以上是关于如何将信息附加到 R 中 netCDF 文件中的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 中的纬度/经度边界从 netCDF 文件中获取子集

如何将 GeoDataFrame 存储到 NetCDF 文件

使用 R 扩展 netCDF 文件中的尺寸

如何r语言生成netcdf格式文件

从 R 中的 netCDF 提取点的时间序列(lon,lat)

如何在 R 中使用 netcdf 数据进行 PCA