0

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.....など)

4

2 に答える 2