专注系列化、高质量的R语言教程
上篇介绍了使用R语言读入netCDF文件并进行查询的操作,本篇介绍用户如何自定义新变量到netCDF文件中。目录如下:
2 定义新变量
2.1 ncdim_def函数
2.2 ncvar_def函数
2.3 ncvar_add和nc_create函数
2.4 ncvar_put函数
2.5 ncatt_put函数
2 定义新变量
只有当netCDF文件的writable = TRUE
时,用户才能修改文件(添加新变量意味着要修改文件),这需要在读入数据时设置nc_open()
函数的参数write = TRUE
。
library(ncdf4)
PM25_2014 <- nc_open("182.PM2.5_2014_total.nc",
write = T)
下面将根据定义新变量时使用的顺序依次介绍相关函数。
2.1 ncdim_def函数
ncdim_def()
函数是使用到的第一个函数,它用于定义变量的维度。例如,上篇介绍的PM25_2014
数据有三个维度:经度、纬度、时间,但它的两个变量并非都有三个维度:grid_cell_area
表示格点面积,与时间无关,只有经度和纬度两个维度,emission
则有三个维度。
ncdim_def()
函数的语法结构如下:
ncdim_def(name, units, vals, unlim = FALSE,
create_dimvar = TRUE, calendar = NA,
longname = name )
name:维度名称;字符串格式;
units:维度单位;字符串格式;
vals:维度值;数值向量格式。
下列代码可以分别查看emission
三个维度的信息。因为前两个维度输出结果较多,这里仅展示时间维度的信息:
PM25_2014$var$emission$dim[[1]]
PM25_2014$var$emission$dim[[2]]
PM25_2014$var$emission$dim[[3]]
## $name
## [1] "time"
##
## $len
## [1] 12
##
## $unlim
## [1] FALSE
##
## $group_index
## [1] 1
##
## $group_id
## [1] 65536
##
## $id
## [1] 2
##
## $dimvarid
## $id
## [1] 2
##
## $group_index
## [1] 1
##
## $group_id
## [1] 65536
##
## $list_index
## [1] -1
##
## $isdimvar
## [1] TRUE
##
## attr(,"class")
## [1] "ncid4"
##
## $units
## [1] "YYYYMM"
##
## $calendar
## [1] "Gregorian"
##
## $vals
## [1] 201401 201402 201403 201404 201405 201406 201407 201408 201409 201410
## [11] 201411 201412
##
## $create_dimvar
## [1] TRUE
##
## attr(,"class")
## [1] "ncdim4"
使用ncdim_def()
函数定义各维度:
lon <- ncdim_def(name = "lon", units = "degrees_east",
vals = seq(0.05, 359.95, 0.1))
## 按顺序赋参,定义时可省略参数名
lat <- ncdim_def("lat", "degrees_north", seq(-89.95, 89.95, 0.1))
time <- ncdim_def("time", "YYYYMM", 201401:201412)
2.2 ncvar_def函数
使用ncdim_def()
函数定义变量维度后,接着使用ncvar_def()
函数定义变量信息。函数语法结构如下: