#' 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"
))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.