[R] Computing Water Balance using a loop.

Jeff Newmiller jdnewmil at dcn.davis.CA.us
Thu Oct 23 16:30:25 CEST 2014


Sorry... That last expression was backward...

Wb30$ValidWB <- with( Wb30, 0 == cumsum( Water_Balance < 0 | 100 < Water_Balance ) )

---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
--------------------------------------------------------------------------- 
Sent from my phone. Please excuse my brevity.

On October 23, 2014 7:23:15 AM PDT, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> wrote:
>Counting chickens after they have left the coop is not going to work.
>If your inputs push w outside the limits of physics then your input
>data are invalid. Arbitrarily forcing w to fit in that case partially
>ignores the inputs anyway... and since there are many ways for the data
>to be invalid you should be trying to understand how your data are
>invalid so you can figure out if you can extract any meaning from it.
>Drift? Random (lots of ways... which)? Offset? Marking the bad records
>in a new status column is a start... blindly proceeding to pretend as
>though there were no problem in the data is deceptive.
>
>Once you get the input data cleaned up so you don't need to butcher the
>output, the R way to do this is
>
>Wb30$Water_Balance <- with( Wb30, cumsum( Rainfall - Evaporation ) )
>Wb30$ValidWB <- with( Wb30, 0 == cumsum( 0 <= Water_Balance &
>Water_Balance <= 100 ) )
>
>---------------------------------------------------------------------------
>Jeff Newmiller                        The     .....       .....  Go
>Live...
>DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live
>Go...
>                                     Live:   OO#.. Dead: OO#..  Playing
>Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
>/Software/Embedded Controllers)               .OO#.       .OO#. 
>rocks...1k
>---------------------------------------------------------------------------
>
>Sent from my phone. Please excuse my brevity.
>
>On October 23, 2014 6:35:27 AM PDT, Frederic Ntirenganya
><ntfredo at gmail.com> wrote:
>>Dear Duncan,
>>
>>Those condition should be there and also look at Rainfall and
>>evaporation
>>columns.
>>If i change it to be like the following loop, it can't do it.
>>
>>The problem is how to include those conditions and also respect the
>>formula?
>>
>>wb=c()
>>for (w in 1:length(Wb30$Water_Balance)){
>>  if(w<0){
>>   w=0
>>  }
>>
>> wb=Wb30$Water_Balance[w-1] + Wb30$Rainfall[w]-Wb30$Evaporation[w]
>>}
>>wb
>>
>>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 3:44 PM, Duncan Murdoch
>><murdoch.duncan at gmail.com>
>>wrote:
>>
>>> On 23/10/2014, 8:33 AM, Frederic Ntirenganya 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}
>>>
>>> The line above doesn't make sense.  It is impossible for w to be
>both
>>> less than 0 and greater than 100, so the condition will never be
>>true.
>>> And if it is true, "w<-0 & w<-100" is not a sensible thing to do.
>>>
>>> >   #print (w);
>>> >  for (i in 1:length(Wb30$Rainfall)){
>>> >     for (j in 1:length(Wb30$Evaporation)){
>>> >     }
>>> >   }
>>>
>>> Those loops do nothing.
>>>
>>> >  wb<-Wb30$Water_Balance[w] +
>>Wb30$Rainfall[i+1]-Wb30$Evaporation[j+1]
>>>
>>> Those should be using w-1 in place of w, and w in place of i+1 and
>>j+1.
>>>
>>> Duncan Murdoch
>>>
>>> > }
>>> > 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]]
>>
>>______________________________________________
>>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.



More information about the R-help mailing list