dimanche 21 mars 2021

Creating a custom function in R : Gdd Calculation

I need your help please.

My function have to take Tmin and Tmax, then calculates gdd=(Tmin+Tmax)/2 and cumgdd=cumsum(gdd) for each day (row). if cummgdd<=356 , then Tmin<0 = 0 & Tmax>21 = 21 if cumgdd >395 , then Tmin<0 = 0 & Tmax<35 =35.

Please Find Below My Code. It does only apply the first condition, so all Tmax>21 are equal 21.

Many Thanks in Advance.

C.A.

library(dplyr)

climdata= data_frame(j=seq(1,365,by=1), Tmin=runif(min=-3,max=18,n=365),Tmax=runif(min=10,max=39, n=365)

gddcal <- function(climdata,Tmin,Tmax){
  gdd=(Tmin+Tmax)/2
  cumgdd=cumsum(gdd)
  if(cumgdd<=365){
    climdata%>%mutate(tmin=ifelse(Tmin<0,0,Tmin),
                      tmax=ifelse(Tmax>21,21,Tmax),
                      gdd=(tmin+tmax)/2,
                      cumgdd=cumsum(gdd)) -> climdata1
  }else{
    climdata%>%
      filter(cumgdd>395)%>%
      mutate(tmin=ifelse(Tmin<0,0,Tmin),
                      tmax=ifelse(Tmax>35,35,Tmax),
                      gdd=(tmin+tmax)/2,
                      cumgdd=cumsum(gdd))%>%
      bind_rows(climdata1) <- climdata1
  }
  return(climdata1)
} 


Aucun commentaire:

Enregistrer un commentaire