专注系列化、高质量的R语言教程
前面两篇推文已经介绍了netCDF文件在R语言中的读入、查询、添加变量、创建新文件等操作,本篇来介绍ncdf4
工具包其他几个比较重要的函数。目录如下:
3 其他函数
3.1 ncvar_rename函数
3.2 ncvar_change_missval函数
3.3 nc_close函数
3 其他函数
本篇示例数据为上篇推文新创建的PM25_total
数据(也可在公众号后台发送关键词示例数据获取):
library(ncdf4)
PM25_total <- nc_open("183.PM25_total.nc", write = T)
注意:后文会对数据进行修改,请提前做好示例数据的备份,以免重复下载。
3.1 ncvar_rename函数
该函数用于修改netCDF文件的变量名称,示例如下:
ncvar_rename(nc = PM25_total,
old_varname = "total_emission",
new_varname = "total") -> PM25_total
## 使用更改后的变量名查询
a <- ncvar_get(PM25_total, "total")
注意:本段代码只能运行一次,因为名称修改后原名称无法再作为
old_varname
参数。
3.2 ncvar_change_missval函数
该函数用于更改变量中缺失值的数值。例如,假设变量原本使用1e+30
表示缺失值,下列代码可将变量中的1e+30
全部更改为10000
:
ncvar_change_missval(PM25_total, varid = "total",
missval = 10000)
PM25_total$var$total_emission$missval
## [1] 1e+30
使用
ncvar_change_missval()
函数无需使用赋值符号=
或<-
;注意,此时变量名和缺失值均未更新。
3.3 nc_close函数
读者可能注意到,虽然前面已经将变量名total_emission
改成了total
,但是上节代码PM25_total$var$total_emission$missval
仍然使用变量名total_emission
查询缺失值,并且缺失值仍然为1e+30
。
这是因为此时修改信息并未写入到本地文件,需要先使用nc_close()
函数关闭文件后再重新读入。需要注意的是,当文件关闭后,尽管文件仍然显示在R语言的全局环境中,但已不可用。
nc_close(PM25_total)
关闭后数据不可用:
PM25_total
## 以下为报错信息
File 183.PM25_total.nc (NC_FORMAT_CLASSIC):
1 variables (excluding dimension variables):
float total[lon,lat,time]
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(nc, varid) : error returned from C call
重新读入后,变量名和缺失值均已更新:
PM25_total <- nc_open("183.PM25_total.nc", write = T)
PM25_total$var$total$missval
## [1] 10000