【问题标题】:Creating a custom function in R : Gdd Calculation在 R 中创建自定义函数:Gdd 计算
【发布时间】:2021-03-21 20:46:39
【问题描述】:

我需要你的帮助。

我的函数必须取 Tmin 和 Tmax,然后计算每一天(行)的 gdd=(Tmin+Tmax)/2 和 cumgdd=cumsum(gdd)。 如果 cummgdd21 = 21 如果 cumgdd >395 ,则 Tmin

请在我的代码下方查找。 它只适用第一个条件,所以所有 Tmax>21 都等于 21。

非常感谢。

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)
} 


【问题讨论】:

    标签: r function if-statement dplyr


    【解决方案1】:

    在您的代码中,当您更改 if 条件时,您还会重写先前定义的变量(+ 一些微小的语法错误)。这是我的建议,但列名的格式必须与您的测试完全相同data.frame

    format_climdata <- function(climdata){
      climdata1 <- climdata %>% 
        mutate(gdd=(Tmin+Tmax)/2) %>% 
        mutate(cumgdd=cumsum(gdd))
    
      climdata2 <-climdata1 %>% 
        mutate(tmin = ifelse(cumgdd > 365 & Tmin < 0, 0, Tmin),
               tmax = ifelse(cumgdd > 365 & Tmax > 35, 35, Tmax)) %>% 
        mutate(tmin = ifelse(cumgdd <= 365 & Tmin < 0, 0, tmin),
               tmax = ifelse(cumgdd <= 365 & Tmax > 21, 21, tmax))
    
      return(climdata2)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2019-03-16
      • 1970-01-01
      相关资源
      最近更新 更多