8

R パッケージncdfを使用して多次元 NetCDF ファイルを作成しようとしています。私は 1500 ポイントのセットに対して気候の毎日の観測を行っています。観測数は各ポイントで ~ 18250 です。問題は、NetCDF ファイル ( create.ncdf ) の構造が 4Gb を占有し、各ポイントがファイルのサイズを 3Gb 以上増加させる ( put.var.ncdf )ことです。

これは私が使用しているコードです:

# Make a few dimensions we can use
dimX <- dim.def.ncdf( "Long", "degrees", Longvector )
dimY <- dim.def.ncdf( "LAT", "degrees", Latvector )
dimT <- dim.def.ncdf( "Time", "days", 1:18250, unlim=FALSE )

# Make varables of various dimensionality, for illustration purposes
mv <- -9999 # missing value to use
var1d <- var.def.ncdf( "var1d", "units", dimX, mv,prec="double" )
var2d <- var.def.ncdf( "var2d", "units", list(dimX,dimY), mv,prec="double" )
var3d <- var.def.ncdf( "var3d", "units", list(dimX,dimY,dimT), mv,prec="double" )

# Create the test file
nc <- create.ncdf( "writevals.nc", list(var1d,var2d,var3d) )
# !!Creates a nc file with + 4 Gb

# Adding the complete time series for one point (the first point in the list of the dataset)
put.var.ncdf( nc, var3d,dataset[[1]], start=c(Longvector[1],Latvector[1],1),         count=c(1,1,-1))

Longvector と Latvector は、各ポイントの Long と Lat を含む行列から取得したベクトルです。データセットはリスト形式で、ポイントごとに数値のリストがあります。

dataset[[1]]=c(0,0,0,9.7,0,7.5,3.6,2.9,0,0.5,....) 

何か不足していますか、それとも他のパッケージを試す必要がありますか??

4

2 に答える 2

8

再現できないコードにエラーがいくつかあります。私の計算では、ファイルは 219Mb (1500 * 18250 * 8 バイト) です。

library(ncdf)

少なくとも 1 つのスライスに一致するように、最初の 2 つのディムとデータセットのベクトルを指定します

Longvector = seq(-180, 180, length = 50)
Latvector = seq(-90, 90, length = 30)
dataset <- list(1:18250)

dimX <- dim.def.ncdf("Long", "degrees", Longvector)
dimY <- dim.def.ncdf("LAT", "degrees", Latvector)
dimT <- dim.def.ncdf("Time", "days", 1:18250, unlim = FALSE)

mv <- -9999 
var1d <- var.def.ncdf( "var1d", "units", dimX, mv,prec="double")
var2d <- var.def.ncdf( "var2d", "units", list(dimX,dimY), mv,prec="double")
var3d <- var.def.ncdf( "var3d", "units", list(dimX,dimY,dimT), mv,prec="double")

nc <- create.ncdf( "writevals.nc", list(var1d,var2d,var3d))

カウントは軸の位置の値ではなく、次元のインデックスであるためstart、1 に修正し、3 番目の次元のカウント (長さ) を使用します (-1 ではありません)。

put.var.ncdf(nc, var3d, dataset[[1]], start = c(1, 1, 1),  count = c(1, 1, length(dataset[[1]])))

close.ncdf(nc)

ファイルサイズを調べます。

file.info("writevals.nc")$size/1e6
[1] 219.0866
于 2012-05-17T06:03:35.587 に答える