我试图用R编写多个NCDF4文件,我有大量的文件要在分析中读取,并输出到新的NCDF4文件中。下面有创建和写入单个NCDF4文件的代码。这段代码可以很好地创建和写入文件。我需要一点代码来替换ncfname<-“and 123.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)发布于 2017-04-12 21:24:30
循环遍历数据并创建一个netCDF4文件,只要正确设置循环,每次迭代都能工作。首先,您的循环语法需要正确。你的例子中没有你的循环,所以我不能直接评论它。其次,您必须获得不同的字符串来命名您的netCDF文件,正如您已经指出的那样。你可以用这样的东西
ncfname <- sprintf('ABC%03d.nc', i)如果我们假设i是您的循环迭代器。当然,您可以使用任意数量的其他变量来帮助sprintf构建文件名。只是要注意正确的格式语法。关于sprintf的好处是,您有很多格式控件,并且可以很容易地在格式字符串中包含“.nc”扩展名,因此它包含在每个文件名中。如果paste更适合您,那么它也将是构建文件名的另一个有用函数。
最后,要注意循环在脚本中的位置。我的意思是不要一次又一次地设置变量,如果它们没有必要的话。在您的示例中,任何不依赖或创建ncdf4包函数(例如,ncdim_def)都可以放在循环之外,用于构建每个netCDF文件。通常,除了ncvar_put输入的实际数据外,当每个文件相似时,可以在外部循环中定义维度和变量对象。
https://stackoverflow.com/questions/43378415
复制相似问题