繁体   English   中英

写入多个NCDF4文件

[英]Writing multiple NCDF4 files

我正在尝试用R编写多个NCDF4文件。我有大量文件需要读取以进行分析,并输出到新的NCDF4文件中。 我下面有用于创建和写入单个NCDF4文件的代码。 此代码可以很好地创建和写入文件。 我需要一些代码来替换ncfname <-“ ABC123.nc”并进行循环,从而为所分析的每个文件生成一个NCDF4新文件。当我尝试像通常在R中那样使用循环时,如果失败了。 NCDF4软件包想看到“ nc”扩展名。我的代码在下面,有人可以帮忙吗?

#####Write NCDF4 files#############################################
###################################################################

tunits<-"days since 1600-01-01 00:00:00"

#Define dimensions
##################################################################
londim<-ncdim_def("Lon","degrees_east",as.double(Lon))
latdim<-ncdim_def("Lat", "degrees_north",as.double(Lat))
timedim<-ncdim_def("time",tunits,as.double(time))

#Define variables
##################################################################
fillvalue<-(-1e32)

dlname<-"2 meter air temperature"
dlname2<-" 2 meter max air temperature"

 tmp_def<-ncvar_def("Data1","deg_C",
  list(londim,latdim,timedim),fillvalue,dlname,prec = "double")
tmp_def2<-ncvar_def("Data2","deg_C", 
 list(londim,latdim,timedim),fillvalue,dlname2,prec = "double")

#Create Ncdf4 file and  put arrays 
##################################################################
ncfname<-"ABC123.nc"

ncout<-nc_create(ncfname,list(tmp_def,tmp_def2),force_v4=T)

#Put variables
#################################################################

ncvar_put(ncout,tmp_def,Data2,start=NA,count = NA )
ncvar_put(ncout,tmp_def2,Data1, start= NA,count = NA )


ncatt_put(ncout,"Lon","axis","X")
ncatt_put(ncout, "Lat", "axis", "Y")
ncatt_put(ncout, "time","axis", "T")

#################################################
title<-c( 1:2 )
names(title)<-c("jack","jill")
title<-as.data.frame(title)
################################################

# attributes # the 0 designates the attribute as global 
###########################################################
ncatt_put(ncout,0,"Make_NCDF4_File",1, prec="int")
ncatt_put(ncout,0,"XXXXXX",1,prec="short")
ncatt_put(ncout,0,"AR000087828",1, prec="short")
ncatt_put(ncout,0,"description","this is the script to write NCDF4files")


#Close file and write date to disk
##########################################################
nc_close(ncout)

只要正确设置了循环,就可以循环遍历数据并创建netCDF4文件。 首先,您的循环语法必须正确。 您的示例中没有循环,因此我无法直接对其进行评论。 其次,正如您所指出的,您将必须获得不同的字符串来命名您的netCDF文件。 你可以用这样的东西

ncfname <- sprintf('ABC%03d.nc', i)

如果我们假设i是您的循环迭代器。 当然,您可以使用任意数量的其他变量来帮助sprintf建立文件名。 请注意正确的格式语法。 sprintf的好处是您具有许多格式控制,并且可以轻松地在格式字符串中包含诸如'.nc'扩展名之类的内容,因此它包含在每个文件名中。 如果该文件名对您更好,则paste也是构建文件名的另一个有用功能。

最后,请注意循环在脚本中的位置。 我的意思是,不必一定要一遍又一遍地设置变量。 在您的情况下,任何不依赖或不创建ncfname ncdf4软件包函数(例如ncdim_def )都可以放在循环之外,并用于构建每个netCDF文件。 通常,当每个文件都相似(除了ncvar_put输入的实际数据)时,可以在循环外部定义维和变量对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM