R/ci_ht_fonction_ch.R

#' @title Fonction de calcul de hauteur en fonction des circonferences sur la base modele COOP
#'
#' @description Cette fonction attribue une hauteur (cm) estime pour une circonference (cm) d'apres le modele Coop mais aussi des modeles alternatifs, sur la base d'une modelisation COOP, deja realise au prealable.
#'
#' @param Circ : un vecteur, liste des circonferences (en cm)
#' @param par1 : parametre 1 du modele, un scalaire (dans ce cas applique a tous) ou un vecteur de meme longueur que Circ
#' @param par2 : parametre 2 du modele, un scalaire (dans ce cas applique a tous) ou un vecteur de meme longueur que Circ
#' @param modL : type de modele utilise, avec 2 possibilites : "coop" (par defaut) pour l'equation de la Coop (forme : ht = 130 + (par1*(1 - exp(-par2 * Circ))) et "lineaire" (forme : ht = 130 + par1 * Circ), notamment comme alternative pour les tres jeunes peuplement ou la fonction Coop ne converge pas. ModL peut prendre la dimension de Circ si different modele sont appliques.
#' @details par1, par2 et modL peuvent prendre la meme dimension que Circ (dans ce cas, chaque Circonference a ses propres parametres de modelisation, ou bien n'etre que des scalaires, auquel cas le meme modele est applique a chaque element de Circ).
#' @return hauteur en cm, vecteur de la taille de Circ.
#'
#' @author Quentin Girard
#' @references Protocole Coop chene... document d Ingrid et Claudine
#'
#' @seealso  ci_ht_regression_ch
#' @examples
#' circ <- c(5:30)
#' ht <- ci_ht_fonction_ch(Circ = circ, par1 = 1000, par2 = 0.1, modL = "coop")
#' plot(circ, ht)
#'
#' @keywords function
#'
#' @include coopR-package.R
#' @family coopR
#' @export

ci_ht_fonction_ch <- function(Circ, par1, par2 = NA, modL = "coop") { 
# Tous les parametres sont passe en vecteur de taille egale a Circ
  if (length(modL) == 1) {
    modL <- rep(modL, length(Circ))
  } 
  if (length(par1) == 1) {
    par1 <- rep(par1, length(Circ))
  }
  if (length(par2) == 1) {
    par2 <- rep(par2, length(Circ))
  } 
# erreur dans l'entree des donnees
  # Cas ou par1, par2 et modL ne sont pas de taille egale a 1 ou de meme taille que Circ
  if (length(modL) != length(Circ) | length(par1) != length(Circ) | length(par2) != length(Circ)) {
    stop(paste("par1, par2 et modL doivent etre des vecteurs de taille 1 ou de meme taille que Circ \n"))
  }
  # modele demande non existant
  if (sum(!modL %in% c("coop", "lineaire", NA)) != 0) { 
    warning("seule les regressions 'coop' et 'lineaire' sont referencees dans cette fonction \n")
  }
  if (sum(modL == "lineaire" & !is.na(par2)) != 0) {
    warning("Remarque : par2 n'est pas utilise pour un modele lineaire \n")
  } 
# Tout est en ordre, on peut y aller
  res <- ifelse(modL == "coop",     130 + (par1 * (1 - exp(- par2 * Circ))),
         ifelse(modL == "lineaire", 130 + (par1 * Circ),                     NA))
  return(res)
}

        
jprenaud-02/coopR documentation built on May 3, 2019, 7:06 p.m.