Tutoriel R

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 :

rcolorsheet

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 :

margins

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 &

 Haut de page

css.php