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)
- Astuce RStudio : curseur multilignes (exemple ici)
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)