我正在尝试用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)
答案 0 :(得分:0)
循环访问数据并创建netCDF4文件,只要您的循环设置正确,每次迭代都可以正常工作。首先,您的循环语法需要正确。你的例子中没有你的循环所以我不能直接评论它。其次,正如您所指出的,您必须获取不同的字符串来命名您的netCDF文件。你可以使用这样的东西
i
如果我们假设sprintf
是你的循环迭代器。当然,您可以使用任意数量的其他变量来帮助sprintf
构建文件名。请注意正确的格式化语法。关于paste
的好处是你有很多格式控制,并且可以很容易地在格式字符串中包含诸如'.nc'扩展名之类的内容,因此它包含在每个文件名中。 ncdf4
将是另一个有用的函数来构建文件名,如果这对你更好。
最后,要注意你的脚本在哪里循环。我的意思是,如果不必要,就不要反复设置变量。在您的情况下,任何不依赖于或创建ncdim_def
的{{1}}包函数(例如,ncfname
)都可以放在循环之外,并用于构建每个netCDF文件。通常,当每个文件相似时,可以在外部循环中定义维度和变量对象,但ncvar_put
输入的实际数据除外。