R ill を使用して、15 の変数を持つ 5 次元空間を含む私の NetCDF データを開こうとします。(計算用の変数は行列 1000X920 にあります)
この問題は、実際には以前の他の質問と同じように見えます。
最初は RNetCDF パッケージを使用していましたが、試行錯誤の末、パッケージがデータを読み取るときに一貫性がないことがわかりました。そして、ncdfパッケージを使用した後、最終的に改善されました。
単一のファイル内のデータを開くことには問題はありませんが、特定の変数(例: var no 15) に対してフォルダー内の 100 を超えるデータをループしようとすると、プログラムは失敗しました。
> days = formatC(001:004, width=3, flag="0")
> ncfiles = lapply (days,
> function(d){ filename = paste("data",d,".nc",sep="")
> open.ncdf(filename) })
また、特定の変数に対してこのようなコマンドを試すと
> sapply(ncfiles,function(file,{get.var.ncdf(file,"var15")})
だから私の質問は、特別な変数ですべてのnetcdfファイルを読み取り、1つのフレームで計算を行う解決策です。以前のソリューションから、netcdf データ全体で変数 15 を生成できませんでした。
この問題の解決策をありがとう。
アップデート:
これが私がした最後のことです
私が書くとき
library(ncdf)
files=list.files("allnc/",pattern='*nc',full.names=TRUE)
for(i in seq_along(files)) {
nc <- lapply(files[i],open.ncdf)
lw = get.var.ncdf(nc,"var15")
x=dim(lw)
rbind(df,data.frame(lw))->df }
> nc ですべての netcdf データを取得できます
lw1、lw2...などのように、新しい名前の変数データを自動的に取得するにはどうすればよいですか?適用できません
var1 <- lapply(files, FUN = get.var.ncdf, variable = "var15")
その後、すべてのデータで計算を行うことができます。
私が試したもう1つのテクニックは、RNetCDFパッケージnを使用してループを実行することです
# Declare data frame
df=NULL
#Open all files
files= list.files("allnc/",pattern='*.nc',full.names=TRUE)
# Loop over files
for(i in seq_along(files)) {
nc = open.nc(files[i])
# Read the whole nc file and read the length of the varying dimension (here, the 3rd dimension, specifically time)
lw = var.get.nc(nc,'DBZH')
x=dim(lw)
# Vary the time dimension for each file as required
lw = var.get.nc(nc,'var15')
# Add the values from each file to a single data.frame
}
変数データを取得できますが、すべてのファイル nc から 1 つのデータを取得しただけです。注:私のデータ名のサンプル(data20150102001.nc、data20150102002.nc.....など)