R/nsignif.R

#' Chiffres significatifs
#'
#' Converti un nombre \code{x} avec \code{signifx} chiffres significatifs.
#'
#' @param x Nombre à convertir.
#' @param signifx Chiffres significatifs.
#' @param ... Arguments de \code{\link[base]{format}}
#'
#' @return Nombre \code{x} de format CHR, formatté selon les arguments avec \code{signifx} chiffres significatifs.
#'
#' @export
nsignif <- function(x, signifx, ...){

  x <- signif(x, signifx)
  # Nombre de décimales dans un nombre
  num_decimals <- function (x){
    if ((x%%1) != 0) {
      nchar(strsplit(sub("0+$", "", as.character(x)), ".",
                     fixed = TRUE)[[1]][[2]])
    }
    else {
      return(0)
    }
  }
  decix <- num_decimals(x)
  # Nombre de "chiffres" dans le nombre (nchar sans la décimale)
  ndigits <- function(x){
    nchar(sub('^0+','',sub('\\.','',x)))
  }
  ncharx <- ndigits(x)
  # Détermine le nombre de charactères manquants
  char <- signifx - ncharx
  # Décimales à afficher
  dshow <- char + decix
  # Affichage du nombre
  if(char>0){
    format(signif(x, digits = signifx),
           digits = dshow,
           nsmall = dshow,
           ...)
  } else {
    format(signif(x, digits = signifx),
           ...)
  }
}
INESSSQC/INESSS documentation built on May 4, 2019, 4:14 a.m.