La plupart du temps j'utilise Matlab pour mes calculs scientifiques. Mais parfois quand il s'agit d'analyser d'un point de vue statistique mes données, j'ai recours au logiciel R qui est spécifique à ce type d'analyse, et qui possède un certains nombres de packages prévus à cet effet. Comme je l'utilise de manière très sporadique, j'ai tendance à oublier les commandes et à devoir rechercher de nouveau la solution sur internet. Cette page me servira donc à centraliser mes recherches et fera office de pense-bête.
FAQ
Comment définir un vecteur ?
Comment définir une fonction ?
Comment appliquer une fonction de multiples arguments à un vecteur ?
Comment créer proprement une matrice ?
Comment représenter une matrice sous forme d'image ?
Comment changer la palette de couleur utilisée ?
Comment déclarer une liste d'objets ?
Comment utiliser une color bar partagée par plusieurs plots ?
Comment calculer le variogramme empirique d'une image ?
Comment enregistrer l'historique des commandes dans un fichier texte ?
Comment enregistrer une image en format PDF ?
Comment créer des noms de fichiers à partir de variables ?
Comment lire/charger un fichier de données dans une matrice ?
Comment écrire une matrice dans un fichier ?
Comment exécuter un script en arrière plan ?
Comment définir un vecteur ?
v <- c(1,1,2,0);
Ou bien si on veut un vecteur dont les composantes forment une séquence équirépartie :
v <- seq(-pi/2,pi/2,by=0.1);
La liste ainsi créée sera composée des points de $[-\pi/2,\pi/2]$ avec un pas de 0.1
Comment définir une fonction ?
fun <- function(a,b) { return(a*b); }
Comment appliquer une fonction de multiples arguments à un vecteur ?
v <- c(1,2,3); alpha <- 4; output <- mapply(fun,a=v,b=4);
renvoie :
output [1] 4 8 12
Comment créer proprement une matrice ?
create.matrix <- function(size) { x <- matrix() length(x) <- size^2 dim(x) <- c(size,size) x }
Comment représenter une matrice sous forme d'image ?
# On définit la grille [0,1]^2 x <- seq(0,1,by=0.01); y <- seq(0,1,by=0.01); # On remplit la matrice correspondant à la fonction M(x,y) = x^2+y^2 M <- create_matrix(length(x)); for (i in 1:length(x)) { for (j in 1:length(x)) { M[i,j] <- x[i]^2+y[j]^2; } } # On affiche la fonction 2D en représentant la matrice sous forme d'image image(x,y,M);
Comment changer la palette de couleur utilisée ?
On va utiliser les deux librairies suivantes :
library(colorRamps); library(RColorBrewer); image(x,y,M,col=matlab.like(100)); # palette de colorRamps image(x,y,M,col=brewer.pal(9,"Blues"); # palette de RColorBrewer
Pour consulter toutes les palettes disponibles, cliquez sur le lien ci-dessous :
Comment ajouter une "color bar" à l'image ?
par(mar=c(5,5,5,5)) # Ajoute une marge pour pouvoir ajouter la color bar image(x,y,M,col=matlab.like(50)) # Ajoute une color bar dans la région "smallplot", de valeurs comprises entre min et max image.plot(M,zlim=c(min(M),max(M)),legend.only=TRUE,col=matlab.like(50),smallplot=c(.9,0.93,0.2,0.8))
Pour plus de précisions sur les marges, se référer au schéma suivant :
Comment déclarer une liste d'objets ?
M1 <- create_matrix(10); M2 <- create_matrix(10); MATS <- list(M1,M2); # liste de matrices M3 <- MATS[[1]]; # pour accéder à la première matrice de la liste
Comment utiliser une color bar partagée par plusieurs plots ?
# Affiche l'image correspondant à chaque matrice de la liste MATS # Joint une color bar propre à chaque matrice si couples=FALSE, et commune sinon plotlistmatrix <- function(x,y,MATS,couples=TRUE) { n <- 400; # nombre de couleurs utilisées dans la palette nbFrame <- floor(length(MATS)/3)+1; # nombre de lignes de "3 plots" if (length(MATS)%%3 == 0) { nbFrame <- nbFrame-1; } # tableau stockant le min et le max de chaque matrice de la liste MATS minmax <- matrix(); length(minmax) <- 2*length(MATS); dim(minmax) <- c(2,length(MATS)); # Stockage des min et max for (i in 1:length(MATS)) { minmax[1,i] <- min(MATS[[i]]); minmax[2,i] <- max(MATS[[i]]); } # Plus petit min et plus grand max parmi toutes les matrices minglobal = min(minmax[1,]); maxglobal = max(minmax[2,]); # Préparation de la fenêtre d'affichage par(c(5,5,5,5)) if (length(MATS) <= 3) { par(mfrow=c(1,length(MATS)),pty="s") } else { par(mfrow=c(nbFrame,3),pty="s"); } for (i in 1:length(MATS)) { # barycentres permettant de situer la plage de valeurs [min(MATS[[i]]),max(MATS[[i]])] # parmi la plage totale [minglobal,maxglobal] lambda_min <- (minmax[1,i]-minglobal)/(maxglobal-minglobal); lambda_max <- (minmax[2,i]-minglobal)/(maxglobal-minglobal); nmin <- floor(lambda_min*(n-1))+1; nmax <- floor(lambda_max*(n-1))+1; if (couples == TRUE) { # seule la plage [nmin,nmax] de couleur est utilisée image(x,y,MATS[[i]],col=matlab.like(n)[nmin:nmax]); } else { # toute la plage de couleur est utilisée image(x,y,MATS[[i]],col=matlab.like(n)); # ajout d'une color bar propre image.plot(MATS[[i]],zlim=c(minmax[1,i],minmax[2,i]),legend.only=TRUE,col=matlab.like(50),smallplot=c(.85,0.9,0.2,0.8)) } } # Color bar commune if (couples == TRUE) { image.plot(MATS[[1]],zlim=c(minglobal,maxglobal),legend.only=TRUE,col=matlab.like(50),smallplot=c(.85,0.9,0.1,1),cex=1); } }
Comment calculer le variogramme empirique d'une image ?
library(fields); # X : matrice de l'image # R : rayon calculé autour de l'origine # dx,dy : pas de calcul vario <- vgram.matrix(X,R=100,dx=1,dy=1); plot(vario);
Comment enregistrer l'historique des commandes dans un fichier texte ?
savehistory("nom.Rhistory");
Comment enregistrer une image en format PDF ?
pdf("nom.pdf"); # redirige le flux d'écriture dans le PDF plot(...); # commandes graphiques utilisées dev.off(); # rétablit le flux d'origine
Comment créer des noms de fichiers à partir de variables ?
filename = "histogramme42.txt"; numHist = gsub("[^0-9]", "", filename); # pour extraire le numéro du nom de fichier num = as.numeric(numHist); # convertit en valeur numérique fileout = paste("histplot",numHist,".pdf",sep = ""); # concatène les chaînes de caractères
Comment lire/charger un fichier de données dans une matrice ?
x = as.matrix(read.table(filename));
Comment écrire une matrice dans un fichier ?
library(MASS); write.matrix(X,file="matrice.txt",sep=" "); # ou bien sans la librairie write.table # Enfin si on ne veut pas inclure le nom des variables colonne/ligne # write.table(X,file,sep,row.names=F,col.names=F);
Comment exécuter un script en arrière plan ?
# Ce script start.R exécute la fonction main() source("main.R"); main();
nohup time Rscript start.R &