首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写多个NCDF4文件

编写多个NCDF4文件
EN

Stack Overflow用户
提问于 2017-04-12 19:49:41
回答 1查看 365关注 0票数 0

我试图用R编写多个NCDF4文件,我有大量的文件要在分析中读取,并输出到新的NCDF4文件中。下面有创建和写入单个NCDF4文件的代码。这段代码可以很好地创建和写入文件。我需要一点代码来替换ncfname<-“and 123.nc”,从而为分析过的每个文件生成一个NCDF4新文件。当我尝试使用循环时,通常在R中,如果失败的话。NCDF4包似乎想看到“nc”扩展。我的代码在下面。有人能在这方面提供帮助吗?

代码语言:javascript
复制
#####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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-12 21:24:30

循环遍历数据并创建一个netCDF4文件,只要正确设置循环,每次迭代都能工作。首先,您的循环语法需要正确。你的例子中没有你的循环,所以我不能直接评论它。其次,您必须获得不同的字符串来命名您的netCDF文件,正如您已经指出的那样。你可以用这样的东西

代码语言:javascript
复制
ncfname <- sprintf('ABC%03d.nc', i)

如果我们假设i是您的循环迭代器。当然,您可以使用任意数量的其他变量来帮助sprintf构建文件名。只是要注意正确的格式语法。关于sprintf的好处是,您有很多格式控件,并且可以很容易地在格式字符串中包含“.nc”扩展名,因此它包含在每个文件名中。如果paste更适合您,那么它也将是构建文件名的另一个有用函数。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43378415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档