2017-06-20 8 views
0

各ファイルに56個のアンサンブルを含む159個のNcdf4ファイルがあります。私は159個の入力ファイルのそれぞれからアンサンブル1を取り出したいと思う。次に、すべてのアンサンブル1を1つのファイルに含む単一のNCDF4ファイルを作成します。私のコードは以下の通りです。私の問題は、159の最後のファイルが出力ファイルに書き込まれたデータだけです。私はネストされたループがないと思いますが、わかりません。私の試みは失敗しました。 RM(リスト= LS()) ライブラリ(ncdf.tools) ライブラリ(ncdf4) ライブラリ(ncdf4.helpers) ライブラリ(RNetCDF)別々のNCDF4ファイルを159個の独立したNCDF4ファイルから抽出した単一のNCDF4ファイルを作成

setwd("D:/Rwork/Project") # set working folder 

#####Write NCDF4 files############################################# 
dir("D:/Rwork/Project/Test")->xlab # This is the directory where the file for analysising are 
filelist <- paste("Test/",dir("Test"),sep="") 


N <- length(filelist)  # Loop over the individual files 
for(j in 1:N){ 

File<-nc_open(filelist[j]) 
print(filelist[j]) 
Temperature<-ncvar_get(File,"t2m") 
Lat<-ncvar_get(File, "lat") 
Lon<-ncvar_get(File,"lon") 
Time<-ncvar_get(File,"time") 
EnsambleNo.<-ncvar_get(File,"ensemble_member") 
Temperature 
Ensamble1<-Temperature[,,1,] #The Ensamble wanted, 1 to 56 
Ensamble1<-round(Ensamble1,digits = 0) 

tunits < - 「時間1800-01-以来01夜12時00" 分00秒

の#define寸法

################################################################## 
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<-"tm2" 

tmp_def<-ncvar_def("Ensamble1","deg_K", list(londim,latdim,timedim),fillvalue,dlname,prec =  "double") 

ncfname<-("D:/Rwork/Project/TrialEnsamble/TrialEnsamble.nc") 
ncout<-nc_create(ncfname,list(tmp_def),force_v4=T) 

ncvar_put(ncout,tmp_def,Ensamble1,start=NA,count = NA)# Think I need a nested loop here 


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("Ian","Gillespie") 
title<-as.data.frame(title) 

ncatt_put(ncout,0,"Make_NCDF4_File",1, prec="int") 
ncatt_put(ncout,0,"Maynooth_University",1,prec="short") 
ncatt_put(ncout,0,"AR000087828",1, prec="short") 
ncatt_put(ncout,0,"mickymouse",1, prec="short") 

history <- paste("P.J. Bartlein", date(), sep=", ") 
ncatt_put(ncout,0,"description","this is the script to write NCDF4 files") 



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

} 

答えて

0

実測最初の3つの同じサイズで4次元の空の配列を調製するために優れていると名前がDIMEN forループから生成された配列として4番目の次元を追加したものです。各繰り返しの結果を保持するための4番目のディメンション dir( "D:/ Rwork/Project/Test") - > xlab#これは、解析するファイルがあるディレクトリです filelist < - paste( "Test /"、dir ( "Test")、sep = "")

output <- array(, dim=c(192,94,12,160))# need to change this to length(Lat), etc 

N <- length(filelist)  # Loop over the individual files 
for(j in 1:N){ 

    File<-nc_open(filelist[j]) 
    print(filelist[j]) 
    Temperature<-ncvar_get(File,"t2m") 
    Lat<-ncvar_get(File, "lat") 
    Lon<-ncvar_get(File,"lon") 
    Time<-ncvar_get(File,"time") 
    Year<-c(1851:2010) 
    EnsambleNo.<-ncvar_get(File,"ensemble_member") 
    Temperature 
    Lat<-round(Lat,digits = 2) 
    Lon<-round(Lon,digits = 2) 
    Ensamble1<-Temperature[,,1,] #The Ensamble wanted, 1 to 56 
    Ensamble1<-round(Ensamble1,digits = 1) 
    dimnames(Ensamble1)<-list(Lon,Lat,Time) 
    dimnames(output) <- list(Lon,Lat,Time,Year) 
    } 

    print(Ensamble1) 
関連する問題