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

时间:2014-03-11 17:17:32

标签: r append netcdf

这是我第一次在很长一段时间后潜伏在stackoverflow上,所以请保持温柔:)

我在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文件中吗?正如你可能会告诉我的那样,我已经被束缚了。

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

1 个答案:

答案 0 :(得分: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创建的对象。