Hello,
I did a mistake in my script:
> hour <- day*24; hour <- c(hour[1],cumsum(hour[1:length(hour)-1]))
should be replaced by:
> hour <- day*24; hour <- c(0,cumsum(hour[1:length(hour)-1]))
Regards
Le 05/07/2012 10:49, Pascal Oettli a ?crit :> Hello,
>
> A short code to include real monthly calendar to your data, similar to
> the one inside NCEP2 reanalysis.
>
> library(ncdf)
>
> lon <- seq(from=140.0251, to=146.6751, length.out=241)
> lat <- seq(from=-38.975, to=-31.025, length.out=160)
> x=dim.def.ncdf("Lon","degreesE",as.double(lon))
> y=dim.def.ncdf("Lat","degreesN",as.double(lat))
>
>
> y1 = 1800 # start of the period
> y2 = 2012 # end of the period
>
> year <- seq(y1,y2,1)
> day <-
> c(31,28,31,30,31,30,31,31,30,31,30,31)%*%matrix(1,1,length(year));
> day[2,leap.year(year)] <- 29; day <- as.vector(day)
> hour <- day*24; hour <- c(hour[1],cumsum(hour[1:length(hour)-1]))
> year <- rep(year,each=12)
>
> syntime <- hour[year==1968] #change the year or change this line to
> include more years
> t=dim.def.ncdf("Time","hours since 1800-1-1
00:00:00",syntime,unlim=TRUE)
>
>
> And your "mrain" matrix should have 3 dimensions (lon x lat x
time),
> before to save it as a NetCDF file.
>
> Regards.
>
>
> Le 04/07/2012 23:13, Jun Chen a ?crit :
>>
>> Hi Pascal,
>> I think I figure it out.
>> By doing the following, I can made "lon" &
"lat" become a
>> class of dim.ncdf:
>> lon <- seq(from=140.0251, to=146.6751, length.out=241)
>> lat <- seq(from=-38.975, to=-31.025, length.out=160)
>>
x=dim.def.ncdf("Lon","degreesE",as.double(lon))
>>
y=dim.def.ncdf("Lat","degreesN",as.double(lat))
>>
>> However, after running the script, there is a error I really
>> unable to understand:
>> error at data.frame(..., check.names = FALSE) :
>> parameter value mean different rows 0, 31981
>>
>> If you can understand what the problem is, please as kind as
>> offer me a direction.
>>
>>
>>
>> Many thanks,
>> Jun
>>
>>
>>
>>
>>> Date: Wed, 4 Jul 2012 10:39:29 +0100
>>> From: kridox at ymail.com
>>> Subject: Re: [R] Please help
>>> To: chenshong at hotmail.com
>>> CC: r-help at r-project.org
>>>
>>> Hello,
>>>
>>> Following lines are wrong:
>>>>
x=dim.def.ncdf("Lon","degreesE",140.0251:146.6751)
>>>>
y=dim.def.ncdf("Lat","degreesN",(-31.025):(-38.975))
>>>
>>> You have 241 longitudes and 160 latitudes.
>>> lon <- seq(from=140.0251, to=146.6751, length.out=241)
>>> lat <- seq(from=-38.975, to=-31.025, length.out=160)
>>>
>>> Regards
>>>
>>>
>>>
>>> ----- Mail original -----
>>> De : Jun Chen <chenshong at hotmail.com>
>>> ? : r-help at r-project.org
>>> Cc :
>>> Envoy? le : Mercredi 4 juillet 2012 10h52
>>> Objet : [R] Please help
>>>
>>>
>>> Dear All,
>>> I am a research student in environment. I have only
little
>>> programming knowledge. I am currently doing the last project about
>>> rainfall impact on ground water quality in an area. It happens that
I
>>> have to use R to read rainfall data (3 dimension) from ASC file
>>> (*.asc), and then write them into one NCDF file (*.nc).
>>>
>>> I have been working very hard on study R, but I still
can
>>> not fix the problem. Could someone please as kind as point out that
>>> what the problems are in my R script?
>>>
>>> Firstly, this is an example of data in asc file:
>>> NCOLS 241
>>>
>>> NROWS 160
>>>
>>> XLLCORNER 140.00012207031
>>>
>>> YLLCORNER -39.000000000000
>>>
>>> CELLSIZE 0.50000000000000E-01
>>>
>>> NODATA_VALUE -99.00000
>>>
>>> 166.30 160.87 155.23 149.33 143.83 138.52
>>> 133.29 128.34 123.76 119.21
>>>
>>> 115.06 110.90 107.22 103.69 100.40 97.29
>>> 94.58 92.15 90.00 87.91
>>>
>>> 86.20 84.57 83.22 81.94 81.11 80.38
79.37
>>> 78.73 79.70 79.62
>>>
>>>
-----------------------------------------------------------------------------------------------------------------------
>>>
>>>
>>>
>>>
>>> And then this is the script I wrote:
>>>
>>> setwd("E:/grid")
>>>
>>> #defining dimension
>>>
>>>
x=dim.def.ncdf("Lon","degreesE",140.0251:146.6751)
>>>
>>>
y=dim.def.ncdf("Lat","degreesN",(-31.025):(-38.975))
>>>
>>>
t=dim.def.ncdf("Time","1968-01",1:12,unlim=TRUE)
>>>
>>>
>>>
>>> #setup variable
>>>
>>>
varmr=var.def.ncdf("mr","mm",list(x,y,t),-99.00,
>>>
>>> longname="monthly rainfall")
>>>
>>>
>>> #create ncdf file
>>>
>>> ncnew=create.ncdf("rainfall.nc", varmr)
>>>
>>>
>>> #read input
>>>
>>> files=list.files(pattern=".asc")
>>>
>>> mrain=matrix(0:0,0,3)
>>>
>>>
>>> for(i in files)
>>>
>>> {rainfall=data.frame(readAsciiGrid(i))
>>>
>>> mrain=cbind(mrain,rainfall)
>>>
>>> }
>>>
>>> put.var.ncdf(ncnew, mrain)
>>>
>>>
>>> close.ncdf(ncnew)
>>>
>>>
-------------------------------------------------------------------------------
>>>
>>>
>>> [[elided Hotmail spam]]
>>>
>>>
>>>
>>>
>>>
>>> Many thanks,
>>> Jun
>>>
>>>
>>>
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>