R/format_fct.R

Defines functions vspace vfill titre_section rl quad pagebreak nline_image nline NA2value ltx_insert_image formatr fin_de_la_section chr2ltx catx

Documented in catx chr2ltx fin_de_la_section formatr ltx_insert_image NA2value nline nline_image pagebreak quad rl titre_section vfill vspace

#' catx
#'
#' Boucle qui `cat()` tous les éléments.
#'
#' @param ... Chaines de caractères.

#' @export
#' @keywords internal
#' @examples
#' catx("Ceci", " est\\nun exemple.", "\\nFin de l'histoire.")
catx <- function(...){
  for(element in c(...)) cat(element, "\n", sep = "")
}


#' chr2ltx
#'
#' Converti les caractères spéciaux de LaTeX dans une chaine de caractères en R.
#'
#' Caractères spéciaux de LaTeX gérés par `chr2ltx` :
#' * '%'
#' * '_'
#'
#' @param x chaine de caractères à convertir.
#'
#' @return chaine de caractères.
#' @keywords internal
#' @export
#' @examples
#' chr2ltx("%")
#' chr2ltx("Ceci_est%une$chaine à convertir")
chr2ltx <- function(x){
  latex_restricted_char <- c("_", "%")
  for(char in latex_restricted_char) x <- gsub(char, paste0("\\\\", char), x)
  return(x)
}


#' fin_de_la_section
#'
#' Indique la fin de la section dans le rapport d'analyse.
#'
#' @keywords internal
#' @export
#' @examples
#' fin_de_la_section()
fin_de_la_section <- function(){
  return(paste0(
    "\n",
    "\\begin{center}\n",
    paste(rep("\\_",10), collapse = ""),"Fin de la section",paste(rep("\\_",10), collapse = ""),"\n",
    "\\end{center}",
    "\n\n"
  ))
}


#' formatr
#'
#' Combinaison des fonctions `format()` et `round()`.
#'
#' * `x` doit être un nombre.
#' * Si `nsmall` n'est pas défini, prend la valeur de `digits`.
#'
#' @param x Nombre à formater.
#' @param digits Nombre de décimales à afficher même si le nombre se termine par des zéros.
#' @param decimal.mark Symbole pour afficher les décimales.
#' @param big.mark Indiquant les multiple de 10e3.
#' @param ... Autres arguments de la fonction [base::format()].
#'
#' @return chaine de caractères
#' @keywords internal
#' @export
#' @examples
#' formatr(1.123)
#' formatr(1.123, 4)
#' formatr(1.123, 4, decimal.mark = "&&")
#' formatr(1233.123, big.mark = "&")
#'
#' formatr("ceci est du texte")  # ERREUR
formatr <- function(x, digits = 2, decimal.mark = ",", big.mark = " ", nsmall = NULL, ...){
  if(is.null(nsmall)) nsmall <- digits  # nsmall devient le nombre de décimale si NULL
  return(
    sapply(x, function(x){  # permet d'appliquer la fonction sur une colonne ou un vecteur.
      if(is.na(x)){
        return(NA)  # gérer les NA - ne pas les transformer en "NA"
      } else if(is.nan(x)){
        return(NaN)  # idem - ne pas les transformer en "NaN"
      } else {
        return(format(round(x, digits),
                      nsmall = nsmall,
                      decimal.mark = decimal.mark,
                      big.mark = big.mark,
                      ...))
      }
    })
  )
}


#' ltx_insert_image
#'
#' Code LaTeX nécessaire à l'ajout d'une image en RMD.
#'
#' @param x Nom de l'image à insérer (inscrire emplacement si nécessaire).
#' @param width Largeur de l'image en cm.
#'
#' @return Code LaTeX à insérer dans un RMarkdown.
#' @keywords internal
#' @export
#' @examples
#' ltx_insert_image("INESSSlogo.jpg", 7)
ltx_insert_image <- function(x, width=NULL){
  if(is.null(width)){
    return(paste0("\\includegraphics{",x,"}"))
  } else {
    return(paste0("\\includegraphics[width=",width,"cm]{",x,"}"))
  }
}


#' Convertir NA
#'
#' Dans un dataset, converti les valeurs NA pour `value`.
#'
#' @param data dataset.
#' @param value Valeur qui remplace NA.
#' @param cols Nom des colonnes où l'on veut convertir les NA. `NULL` = toutes les colonnes.
#'
#' @return data.table
#' @keywords internal
#' @import data.table
#' @export
NA2value <- function(data, value, cols = NULL){
  x <- as.data.table(data); rm(data)
  if(is.null(cols)) cols <- names(x)  # sélectionner toutes les colonnes si cols=NULL
  for(j in cols){
    set(
      x,  # dataset
      which(is.na(x[[j]])),  # numéro de ligne = NA
      j,  # nom de la colonne
      value  # valeur qui remplace le NA
    )  # convertir les NA
  }
  return(x)
}


#' nline
#'
#' `newline` en LaTeX.
#'
#' @keywords internal
#' @export
#' @examples
#' newline()
nline <- function(){
  return("\\newline")
}


#' nline
#'
#' `newline` en LaTeX après une image
#'
#' @keywords internal
#' @export
#' @examples
#' newline()
nline_image <- function(){
  return("\\textcolor{white}{NA}\\newline")
}


#' pagebreak
#'
#' `pagebreak` en LaTeX.
#'
#' @keywords internal
#' @export
#' @examples
#' pagebreak()
pagebreak <- function(){
  return("\n\n\\pagebreak\n\n")
}


#' quad
#'
#' `quad` en LaTeX.
#'
#' @param n nombre de `quad`.
#'
#' @return chaine de caractères.
#' @keywords internal
#' @export
#' @examples
#' quad()
#' quad(3)
quad <- function(n = 1){
  return(paste0(
    "\\null ", paste(rep("\\quad ", n), collapse = "")
  ))
}


#' Retour de ligne
#'
#' @param x
#'
#' @keywords internal
#' @export
#' @examples
#' rl()
#' rl(3)
rl <- function(x){
  return(paste(rep("\n", x), collapse = ""))
}


#' titre_section
#'
#' En LTX, les levels 4 et plus sont considérés comme du texte. Petite astuce pour que le texte s'aligne comme on le désire.
#'
#' `rm_space = TRUE` est souvent utile lorsqu'il y a plusieurs levels > 3 les uns à la suite des autres.
#'
#' @param x Texte du titre de la section.
#' @param level Entier indiquant la hiérarchie de la section.
#'
#' @return titre pandoc
#' @keywords internal
#' @importFrom pander pandoc.header.return
#' @export
#' @examples
#' titre_section("Mon titre")
#' titre_section("La 4e section de mon titre", 4)
titre_section <- function(x, level = 1, rm_space = FALSE){
  if(level > 3){
    if(rm_space){
      return(paste0(vspace(-0.65),
                    pandoc.header.return(x, level), "\n",
                    "\\textcolor{white}{NA}", "\\newline\n\n"))
    } else {
      return(paste0(pandoc.header.return(x, level), "\n",
                    "\\textcolor{white}{NA}", "\\newline\n\n"))
    }
  } else {
    if(rm_space){
      return(paste0(vspace(-0.65), pandoc.header.return(x, level)))
    } else {
      return(pandoc.header.return(x, level))
    }
  }
}


#' vfill
#'
#' `vfill` en LaTeX.
#'
#' @return Chaine de caractères.
#' @keywords internal
#' @export
#' @examples
#' vfill()
vfill <- function(){
  return("\n\\vfill\n\n")
}


#' vspace
#'
#' `vspace` en LaTeX.
#'
#' @param x Mesure en cm. Peut-être négatif : implique un mouvement vers le haut du texte.
#'
#' @return Chaine de caractères.
#' @keywords internal
#' @export
#' @examples
#' vspace(2)
#' vspace(-0.5)
vspace <- function(x){
  return(paste0(
    "\n\\vspace{",x,"cm}\n\n"
  ))
}
INESSS-QC/polymed1 documentation built on Aug. 4, 2020, 12:02 a.m.