[R-sig-Geo] Coordinate/grid for ncdf data

Thomas Szegvary t.szegvary at unibas.ch
Fri Aug 10 15:57:22 CEST 2007


Dear Dave

Great, that worked! Many thanks. Now I want to put more weekly data (as RN01
was data for the first week of the year 2006) into the var_radon, but this
is not possible for dim_station, as there are only 3 dimensions. Do I have
to redefine 51 other dimensions? I tried to use list() to define the other
dimensions, but that didn't work.

Many thanks
Thomas




 
-----Ursprüngliche Nachricht-----
Von: David Pierce [mailto:dpierce at ucsd.edu] 
Gesendet: Donnerstag, 9. August 2007 18:25
An: Thomas Szegvary
Cc: 'Michael Sumner'; r-sig-geo at stat.math.ethz.ch
Betreff: Re: AW: [R-sig-Geo] Coordinate/grid for ncdf data

Hello,

the reason you are getting that error from the ncdf package is because you
have defined variable "Radon" to be a *two* dimensional array in the netcdf
file.  The number of entries in dimension 1 is length(long) = 10573, and the
number of entries in dimension 2 is length(lat) = 10573. 
So, the total number of entries in the array in the netcdf file is
length(long) * length(lat) = 10573 * 10573 = 111788329.

You only want to define a 2-d array when the location of data[i,j] can be
described as (lon[i],lat[j]).  That is not the case for your data, because
it is not on any sort of grid.  Instead, you will want to create a set of
3 1-dimensional arrays along the following lines:

n_stations <- length(RN01)
dim_station <- dim.def.ncdf( 'Radon_station', '-', 1:n_stations )

var_lon <- var.def.ncdf( 'Longitude', 'degreesE', dim_station, 1.e30 )
var_lat <- var.def.ncdf( 'Latitude',  'degreesN', dim_station, 1.e30 )
var_radon <- var.def.ncdf( 'Radon',   'Bq/m2/h1', dim_stattion, 1.e30 )

ncid_out <- create.ncdf( 'rn.weekly.nc', list(var_lon,var_lat,var_radon))

put.var.ncdf( ncid_out, var_lon, long )
put.var.ncdf( ncid_out, var_lat, lat  )
put.var.ncdf( ncid_out, var_radon, RN01 )

close.ncdf( ncid_out )

Now, the location of data point RN01[i] is correctly described as
(lon[i],lat[i]); compare this to what you were trying before, which was
RN01[i,j] having the location (lon[i],lat[j]).

Regards,

--Dave




Thomas Szegvary wrote:
> I use ncdf V1.6 on Windows XP Sp2, I hava attached the sample file 
> (tab
> delim) which contains 2 columns for coordinates long/lat and 10 
> columns for weekly averages of radon. Sp would be the best solution to 
> produce map I guess, but for time series analysis I think netcdf would 
> perform better.
>
> Thanks,thoams
>
>
>
> -----Ursprüngliche Nachricht-----
> Von: Michael Sumner [mailto:mdsumner at utas.edu.au]
> Gesendet: Donnerstag, 9. August 2007 01:49
> An: 'Thomas Szegvary'; r-sig-geo at stat.math.ethz.ch
> Betreff: RE: [R-sig-Geo] Coordinate/grid for ncdf data
>
> Hi, can you provide an example file?
>
> I'd recommend avoiding NetCDF for various reasons, why don't you 
> simply add each value column from the separate files to a new column 
> in a SpatialGridDataFrame?
>
> That would be the recommend sp way to proceed here. If you really need 
> to create a NetCDF file, please let us know more about your OS and the 
> package/s and versions you are using (ncdf I presume?) - however such 
> questions should include the ncdf(?) package author at least.
>
> Cheers, Mike.
>
> -----Original Message-----
> From: r-sig-geo-bounces at stat.math.ethz.ch
> [mailto:r-sig-geo-bounces at stat.math.ethz.ch] On Behalf Of Thomas 
> Szegvary
> Sent: Wednesday, 8 August 2007 11:13 PM
> To: r-sig-geo at stat.math.ethz.ch
> Subject: [R-sig-Geo] Coordinate/grid for ncdf data
>
> Hi!
>
> I have a table with 3 columns, 2 for long/lat coordinates and 1 for 
> values (radon concentration). I have data for every week of the year 
> 2006,distributed in 52 tables/files. I want to create a NetCDF file, 
> which is much easier to handle than extracting the values from 52 
> tables. I tried the following for the first dataset (i.e first week):
>
> #extracting coordinates and values from my tables (which have also 
> other information I don't need)
> W01<-read.table("RN_weekly/KW01_RN.dat")
> long<-W01$V1
> lat<-W01$V2
> RN01<-W01$V3
>
> #defining dimensions for coordinates
> dim1 <- dim.def.ncdf( "EW","degrees", as.double(long))
> dim2 <- dim.def.ncdf( "SN","degrees", as.double(lat))
>
> #defining variable for my values I want to have the time series varz 
> <- var.def.ncdf("Radon","Bq/m2/h1", list(dim1,dim2), -1,
>           longname="Radon flux rate")
>
> #creating the netcdf file and filling the variable varz with the first 
> data-week from my time series nc.rn <- 
> create.ncdf("rn_weekly.nc",varz)
> put.var.ncdf(nc.rn,varz,RN01)
> close.ncdf(nc.rn)
>
>
> The problem now is that the last step (put.var.ncdf) doesn't work, 
> because it says I am trying to "error: you asked to write 111788329 
> values, but the passed data array only has 10573* entries!". So I 
> think the problem is that I need an array with two dimensions 
> (coordinates...) for my values. But how do I get this from my tables??
>
>  *10573 are the pixels for my area
>
> Thanks for any help!
> Thomas
>
>
> __
>
> Thomas Szegvary
> Institute of Environmental Geosciences Department of Geosciences 
> University of Basel Bernoullistrasse 30 CH - 4056 Basel
>
> Tel.  41-61-267 04 82
> Fax. 41-61-267 04 79
> Email: t.szegvary at unibas.ch
> www.radon.unibas.ch
> www.unibas.ch/environment
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>


---------------------------------------------------------------
David W. Pierce        / Climate Research Division
Scripps Inst. Oceanog. / (858) 534-8276 (voice)
dpierce at ucsd.edu       / (858) 534-8561 (fax)




More information about the R-sig-Geo mailing list