Les petits tRucs

Ceci est une liste fourre-tout de fonctions et lignes de code pour se simplifier un peu la vie.
Cet Article est mis à jour au fur et à mesure de mes découvertes.

Si vous avez des solutions différentes et/ou plus efficaces, ou bien si une erreur s’est glissée dans cette page n’hésitez pas à m’en faire part.

NETTOYAGE :

  • Effacer toute la mémoire
rm(list = ls())

  • Effacer toute la mémoire sauf un élément (ici x)
rm(list=setdiff(ls(), "x"))

  • Fermer toutes les fenêtres graphiques
graphics.off()
  • Effacer la console :
CTRL + L

FICHIERS :

  • Ajouter plusieurs fichiers avec leur noms
    Charge les données de tous les fichiers dont le nom se termine .txt dans le dossier de travail. Puis les assigne à un objet dont le nom est identique à celui du fichier source
temp = list.files(pattern="*.txt")
for (i in 1:length(temp)) assign(temp[i], read.table(temp[i]))

OBJETS :

  • Créer une matrice 3D remplie de zéros :
Matrice <- array(rep(0, x*y*z), dim=c(x, y, z))
  • Nommer les objets en fonction de l’avancement dans la boucle :
    Assigne la valeur i à l’objet test_i (ex: test_1=1)
for (i in 1:3){
   temp=i
   assign(paste("test", i, sep="_"), temp)
}
  • Récupérer des données en fonction du nom de l’objet via une boucle :
    Assigne la valeur de Presence_i à Temp (ex : Presence_3=22, alors pour k=3, Temp = 22)
for (k in 1 : 5){
     Temp <- lapply( sprintf('Presence_%d',k), get ) 
}

ÉVITER LES BOUCLES :

  • Changer les NA en 0 :
data[is.na(data)]<-0
  • Fonction which
    Assigne la valeur NA aux objets qui sont inclus dans la colonne col de data et qui sont égaux à X
data$col[which(data$col==X)]<-NA
  • Extraire des données inclues dans deux jeux de données
    Assigne à data3 les données de data2 qui ont les mêmes noms de lignes que dans data1
data3 <- subset(data2, row.names(data2) %in% row.names(data1))
  • Ajout de données ayant un point commun
    /!\ le nombre de données doit être identique entre les deux entités
    Ajoute les données de col2 de data2 dans col1 de data1 en fonction des noms de leurs lignes
data1$col1<- data2$col2[match(row.names(data2), row.names(data1))]

  • Moyenne, écart-type, intervalle de confiance d’un sous groupe avec summarySE du package Rmisc
    Crée table.new qui contient la moyenne, l’écart-type, l’erreur standard, l’intervalle de confiance et la taille de l’échantillon pour le poids en fonction des valeurs d’especes et pays à partir de table.
table.new <- summarySE(table, measurevar="poids", groupsvars=c('especes','pays'))
  • Moyenne d’un sous groupe #1
    Rassemble les données de col1 qui portent la même valeur de col2 (facteur) et en fait la moyenne
table.new <- aggregate(table$col1, list(table$col2), mean, na.rm=T)
  • Moyenne d’un sous groupe #2
    Calcul la moyenne de la colonne poids de table en fonction de la valeur groupe1 inclue dans la colonne nom
data <- apply(subset(table, nom=='groupe1', select = poids), MARGIN = 2, FUN = mean)
  • Moyenne d’un sous groupe #3
    Calcul la moyenne de la colonne poids de table en fonction des valeurs groupe1 et groupe2 inclus dans la colonne nom
data <- apply(subset(table, nom=='groupe1' | nom=='groupe2', select = poids), MARGIN = 2, FUN = mean)
  • Obtenir toutes les combinaisons de deux vecteurs :
    Table contient toutes combinaisons de vec_1 et vec_2, une ligne correspond à une combinaison, la colonne 1 aux valeurs de vec_1 et la colonne 2 aux valeurs de vec_2
Table=expand.grid(vec_1,vec_2)
  • Extraire une partie d’une chaîne de caractères comprise entre deux bornes remarquables avec le package stringr
    N’hésitez pas à faire des bornes de plusieurs caractères s’il y a des répétitions dans la chaîne. (Remerciments : Tiffany Timbers)
getstr <- function(mystring, initial.character, final.character) {
the_pattern <- paste(initial.character,".*",final.character, sep="")
snippet <- str_extract(mystring, the_pattern)
snippet <- sub(initial.character, "", snippet)
snippet <- sub(final.character, "", snippet)
return(snippet)
}
  • Regrouper plusieurs objets avec un nom similaire ( ici data_1, data_2 etc) par les colonnes. (fonctionne aussi pour les lignes, remplacer cbind par rbind)
new_data <- do.call("cbind",mget(ls(pattern = "^data_*")))

CARACTÈRES / FACTEURS :

  • Remplacement dans une chaîne de caractères :
    Remplace les espaces par _ dans les noms de lignes de data
row.names(data) <- sub(' ','_', row.names(data))
  • Effacer les espaces sur les côtés :
    Efface les espaces à droite de la chaîne de caractères
ecolar$Spp_name <- trimws(ecolar$Spp_name, 'right')
  • Transformation des facteurs en valeurs numériques :
data$col=as.numeric(as.character(data$col))
  • Présence d’une partie d’une chaine de caractères dans une autre :
A=c('maison','chambre', 'balcon', 'la chambre de la maison')
grep("chambre",A)
[1] 2 4
grep("chambre|balcon",A)
[1] 2 3 4
grepl("chambre",A)
[1] FALSE  TRUE FALSE  TRUE

DONNÉES :

  • Résultats en écriture décimale :
options(scipen=999)
  • Résultats en écriture scientifique :
options(scipen=0)

  • Calcul de l’erreur standard :
SE <- function(x) sd(x)/sqrt(length(x)) 

AUTRES :

  • Mise à jour de R : Package installR
    Permet de mettre à jour R et ses packages directement à partir de la console.
updateR()
  • Reproductibilité du code en cas de processus aléatoire :
    Permet d’avoir des résultats parfaitement identique d’une session à l’autre.
    A indiquer en début de code.
set.seed()
  • Notification sonore : Package beepr
    Vous permet de déclencher un son quand vous avez fini de faire tourner votre script. Il y a un catalogue de sons très sympa (genre une petite musique à la mario) qui transformera votre analyse sous R en jeu vidéo pour quelques secondes.
    A indiquer à la fin de votre script.
beep(3)
ALT + SHIFT + CLIQUE GAUCHE 
  • Paralléliser son code : Package Parallel
    Dans cet exemple on calcule sur Nb_coeurs différents le carré des valeurs contenues dans variables. Pour choisir le nombre de coeurs maximum possible : mc.cores = detectCores()
out <- mclapply(variables, FUN = function(x) { 
Carre = x^2
}, mc.cores = Nb_coeurs)