2017-09-25 8 views
0
dimensions: 
    i1 = 3 ; 
    x = 11 ; 
    s1 = 1 ; 
    mid1 = 8 ; 
    mid2 = 8 ; 
variables: 
    double Height(i1,x) ; 
    double Temp(s1, x) ; 
    short Soil(s1, x) ; 
    double Liq(mid1, x) ; 

Je dispose d'un fichier NetCDF sur lequel je veux réduire la taille de l'une des dimensions mid1 et remplacer les valeurs:Comment puis-je réduire la taille du fichier netCDF et modifier les données?

icond <- ncdf4::nc_open('dat.nc) 

#New dimensions for new file 
idim <- icond$dim[['i1']] 
xdim <- icond$dim[['x']] 
s1dim <- icond$dim[['s1']] 
mid1dim <- ncdim_def("mid1", "", 1:3) #3 layers 
mid2dim <- icond$dim[['mid2']] 

mv <- -9999 

#Get variable data 
Liqxdat <- ncvar_get(icond, 'Liq')[,1:3] #3 Layers 

#Define new variable 
Liqx = ncvar_def("Liq", "units", list(mid1dim, i1), mv, prec="double") 

#Create netCDF file 
nc = nc_create("test.nc", list(Height, Temp, Soil, Liqx) 

#Write data to the NetCDF file 
ncvar_put(nc, Liqx, Liqxdat) 

Mais ce ne me donne pas de données dans le fichier de sortie.

Répondre

0

Malheureusement, je ne peux pas exécuter votre code. Donc je peux juste deviner pourquoi ça ne marche pas.

  1. Une parenthèse fermante est manquante sur la ligne nc = nc_create (..).
  2. La hauteur, la température et le sol ne sont pas définis. Avec nc_create, vous créez un nouveau fichier, mais vous n'ajoutez pas de données à un fichier existant, c'est ce que vous voulez? Si vous voulez ajouter une nouvelle variable, vous devez utiliser ncvar_add()