[R] Computing Water Balance using a loop.
Frederic Ntirenganya
ntfredo at gmail.com
Fri Oct 24 09:49:40 CEST 2014
Hi Mac,
The first entry is 0 for water balance. That means the 3rd should be zero
according to the formula.
Water balance today = Water balance yesterday + Rainfall − Evaporation
This loop gives 5 for each date. I don't see why ?
May Rainfall Evaporation Water_Balance
1 7 0 5 0
2 8 10 5 NA
3 9 0 5 NA
4 10 0 5 NA
5 11 2 5 NA
6 12 23 5 NA
Regards,
Frederic.
Frederic Ntirenganya
Maseno University,
African Maths Initiative,
Kenya.
Mobile:(+254)718492836
Email: fredo at aims.ac.za
https://sites.google.com/a/aims.ac.za/fredo/
On Thu, Oct 23, 2014 at 7:17 PM, MacQueen, Don <macqueen1 at llnl.gov> wrote:
> If I understand the problem correctly, then I’d suggest this:
>
> ndays <- nrow(Wb30)
>
> for (iday in 2:ndays) {
>
> Wb30$Water_Balance[iday] <- Wb30$Water_Balance[iday-1] +
> Wb30$Rainfall[iday] - Wb30$Evaporation[iday]
>
> Wb30$Water_Balance[iday] <- min(Wb30$Water_Balance[iday], 100)
> Wb30$Water_Balance[iday] <- max(Wb30$Water_Balance[iday], 0)
>
> }
>
> It may be possible without a loop, but I think a loop is easier to
> understand in the current circumstances. And is likely to be fast enough
> that it does not matter.
>
> -
> Don MacQueen
>
> Lawrence Livermore National Laboratory
> 7000 East Ave., L-627
> Livermore, CA 94550
> 925-423-1062
>
>
>
>
>
> On 10/23/14, 5:33 AM, "Frederic Ntirenganya" <ntfredo at gmail.com> wrote:
>
> >Dear All,
> >
> >I want to calculate water balance using the following formula:
> >Water balance today = Water balance yesterday + Rainfall - Evaporation
> >
> >This is a sample of data I am using:
> >
> >head(Wb30)
> > May Rainfall Evaporation Water_Balance
> >1 7 0 5 0
> >2 8 10 5 NA
> >3 9 0 5 NA
> >4 10 0 5 NA
> >5 11 2 5 NA
> >6 12 23 5 NA
> >
> >The following is the loop am trying to use but it is not working well.
> >
> >#Water balance today = Water balance yesterday + Rainfall - Evaporation
> >#If Water balance today < 0 then Water balance today = 0
> >#If Water balance today > 100 then Water balance today = 100
> >wb=c()
> >for (w in 1:length(Wb30$Water_Balance)){
> > if(w<0 & w>100){w<-0 & w<-100}
> > #print (w);
> > for (i in 1:length(Wb30$Rainfall)){
> > for (j in 1:length(Wb30$Evaporation)){
> > }
> > }
> > wb<-Wb30$Water_Balance[w] + Wb30$Rainfall[i+1]-Wb30$Evaporation[j+1]
> >}
> >wb
> >
> >Any suggest of what I am missing for it to work correctly is welcome.
> >
> >
> >Regards,
> >
> >Frederic Ntirenganya
> >Maseno University,
> >African Maths Initiative,
> >Kenya.
> >Mobile:(+254)718492836
> >Email: fredo at aims.ac.za
> >https://sites.google.com/a/aims.ac.za/fredo/
> >
> > [[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.
>
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list