R/saveX.R

#' Sauvegarde un fichier
#'
#' Sauvegarde un tableau R en format .CSV. À utiliser idéalement pour de grosse base de données.
#'
#' Pas besoin d'inscrire \code{.csv} à l'argument \code{file}.\cr\cr
#' Il est conseillé d'utiliser \code{sep = ","} si vous voulez lire la base de données dans EXCEL et que celui-ci est en français.\cr\cr
#' Si le tableau a plus de 1048576 lignes ou 16384 colonnes, la visualisation du tableau sera partielle avec le logiciel EXCEL.
#'
#' @param x data à sauvegarder.
#' @param file "path/nomfichier". path est facultatif.
#' @param sep Séparateur des colonnes.
#' @param dec Séparateur décimal.
#' @param ... Autres arguments de la fonction \code{\link[data.table]{fwrite}} du package \code{data.table}.
#'
#' @return fichier .CSV.
#' @import data.table
#' @import stringr
#' @export
#' @examples
#' saveX(mtcars, "mtcars")
#' saveX(mtcars, "mtcars", sep = "/", dec = ",")
#' saveX(mtcars, "mtcars", rownames = TRUE, colnames = FALSE)
saveX <- function(x, file, sep = ";", dec = ",", ...){

  #### Verification ####
  ArgCheck()
  if(!is.data.frame(x)) addError("'x' n'est pas de type DATA.FRAME.", argcheck)
  finishArgCheck(argcheck)
  x <- as.data.table(x)
  if(!is.character(file)) addError("'file' doit être de type CHARACTER.", argcheck)
  if(!is.character(sep)) addError("'sep' n'est pas de type CHARACTER.", argcheck)
  if(sep == "") addError("'sep' ne peut être vide : ''.", argcheck)
  if(!is.character(dec)) addError("'dec' n'est pas de type CHARACTER.", argcheck)
  if(dec == "") addError("'dec' ne peut être vide : ''.", argcheck)
  if(sep == dec) addError("'sep' et 'dec' ne peuvent avoir la même valeur", argcheck)
  finishArgCheck(argcheck)
  # sep ne doit pas être un charactère d'une valeur dans une colonne de type CHR
  for(j in names(x)){
    # Si c'est une colonne de type numeric, pas de vérification nécessaire
    if(is.numeric(x[[j]])) next  # passe au prochain
    # Si la valeur de sep est incluse dans les valeur d'une colonne = ERREUR
    if(any(str_detect(sep, x[[j]]))){
      addError(paste0("La valeur de 'sep' (",sep,") est incluse dans la colonne '",j,"'."), argcheck)
    }
  }
  finishArgCheck(argcheck)  # Renvoie des messages de vérifications s'il y a lieu


  #### Code ####
  fwrite(x, paste0(file,".csv"), sep = sep, dec = dec, ...)

}
INESSSQC/INESSS documentation built on May 4, 2019, 4:14 a.m.