Explorons mon top 10 des fonctions et trucs intéressants qui nous facilitent la vie lors de la manipulation de données dans R.

Séquences

Vous voulez créer de longues séquences de nombres ou de lettres sans les écrire au long manuellement?
R vous permet de le faire avec l’opérateur « : ».  Vous pouvez aussi utiliser seq() si vous cherchez à créer une séquence qui n’est pas incrémentée de 1. Finalement, letters

[] vous permet de créer des séquences continues de lettres en ordre alphabétique à l’endroit, à l’envers ou débutant à la lettre de votre choix. Pour des lettres majuscules, il suffit d’utiliser LETTERS au lieu de letters. ☺

> 1:5
[1] 1 2 3 4 5

> seq(1, 10, 2)
[1] 1 3 5 7 9

> letters[1:5]
[1] "a" "b" "c" "d" "e"

> LETTERS[1:5]
[1] "A" "B" "C" "D" "E"

Paste

Cette fonction permet de coller ensemble des chaînes de caractères ou de variables.
Un truc intéressant de paste() est qu’il est possible de la mettre dans une autre fonction ou dans une boucle.
Par exemple, si vous voulez créer une boucle qui, à chaque itération, écrit un fichier dont le nom est différent (fichier1, fichier2, fichier3,…).
Voici comment procéder:

>for (i in 1:3) {
   print(paste("file", i, ".txt", sep=""))
}
[1] "file1.txt"
[1] "file2.txt"
[1] "file3.txt"

Ce qui est important, c’est de spécifier le séparateur:

>for (i in 1:3) {
   print(paste("file", i, ".txt", sep="_"))
}
[1] "file_1_.txt"
[1] "file_2_.txt"
[1] "file_3_.txt"

Répertoires de travail

Vous voulez que R place tous les fichiers de sortie dans un répertoire donné?
Bravo pour la volonté de rester organisé!
getwd(), pour « get working directory », est une fonction qui imprime dans la console le répertoire de travail courant.  Sa fonction soeur, setwd(), change le répertoire courant pour celui spécifié.

Sous-chaînes et séparation de chaînes de caractères

Vous êtes-vous déjà retrouvé dans la situation où vous ne vouliez garder qu’une partie d’une chaîne de caractères? Deux fonctions peuvent vous aider avec cette situation de façon efficace.
Lorsque vous connaissez le caractère séparant les deux parties de la chaîne, utilisez strsplit(). Lorsque vous voulez une chaîne résultante de longueur spécifique, utilisez substr().
Par exemple:
Lorsque des noms de gènes ressemblent à « CPB1_1360 », ils doivent être séparés sur le caractère « _ » pour récupérer les symboles.

strsplit("CPB1_1360", split="_")

La fonction crée une liste dans laquelle on doit sélectionner la sous-chaîne désirée:

>strsplit("CPB1_1360", split="_")[[1]][1]
[1] "CPB1"

>strsplit("CPB1_1360", split="_")[[1]][2]
[1] "1360"

Si votre séparateur est un caractère spécial, c’est-à-dire un caractère qui a une signification particulière dans une expression régulière (comme « . » qui veut dire « n’importe quel caractère » ou « | » qui veut dire « ou »), il fait recourir au « \\ » ou utiliser l’option fixed=TRUE.

>strsplit("CPB1|1360", split="\\|")
>strsplit("CPB1|1360", split="|", fixed=TRUE)

Un autre exemple:
Pour raccourcir les identifieurs de patients de type « TCGA.E2.A154.01A.11R.A115.07 » à TCGA-XX-XXXX, vous utilisez substr() en spécifiant le début et la fin:

> substr("TCGA.E2.A154.01A.11R.A115.07", start=0, stop=12)
[1] "TCGA.E2.A154"

Appartenance à une liste

L’appartenance à une liste peut être testée rapidement avec R. Lorsque vous avez 2 listes, a et b et que vous voulez savoir combien d’éléments de a se trouvent dans b la syntaxe est a%in%b
Ceci retourne un vecteur de la même longueur que a qui contient des valeurs booléennes (vrai/faux), caractérisant l’appartenance ou non à la liste b de chaque élément de a. Attention, pour obtenir le résultat contraire, la syntaxe est inversée ! b%in%a 
Voici un exemple:

> a = c("A","B","C")
> b = c("C","D","R")
> a%in%b
[1] FALSE FALSE TRUE

> b%in%a
[1] TRUE FALSE FALSE

Sélection

Pour sélectionner une colonne spécifique dans un tableau sans devoir compter les colonnes pour connaître l’indice, on peut utiliser le nom de la colonne et « $ » :

> a
bcr_patient_barcode er_status_by_ihc pr_status_by_ihc her2_status_by_ihc
1 TCGA-AR-A1AR Negative Negative Negative
2 TCGA-BH-A1EO Positive Positive Negative
3 TCGA-BH-A1ES Positive Positive Negative
4 TCGA-BH-A1ET Positive Positive Negative

> a$er_status_by_ihc
[1] "Negative" "Positive" "Positive" "Positive"

On peut aussi vouloir sélectionner les caractéristiques d’un objet. Par exemple, récupérer la p-value d’un test t de Student: t.test$p.value

> t.test(e1[,1],e2[,2])
Welch Two Sample t-test
data: e1[, 1] and e2[, 2]
t = 0.0581, df = 1645.314, p-value = 0.9537
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.02670277 0.02833160
sample estimates:
mean of x mean of y
0.5019641 0.5011497

> t.test(e1[,1],e2[,2])$p.value
[1] 0.9537151

Pour afficher les caractéristiques d’un objet et leur nom, il faut utiliser names(object).

> names(t.test(e1[,1],e2[,2]))
[1] "statistic" "parameter" "p.value" "conf.int" "estimate" "null.value" "alternative"
[8] "method" "data.name" 

Distributions et échantillonnage aléatoire.

Pour obtenir une série de nombres aléatoires tirés d’une distribution normale, appelez rnorm(), tout en spécifiant le nombre de tirages, la moyenne et l’écart-type de la distribution désirée.

Aide

Si vous êtes perdu et que vous voulez en apprendre plus sur une fonction, tapez ? devant le nom de la fonction. Ceci ouvrira le manuel d’utilisation où vous pourrez trouver les détails importants.

Majuscules, minuscules

Pour mettre des caractères en majuscules ou en minuscules les fonctions toupper() et tolower() sont utiles.

> toupper("FoRMat TrES LaiD")
[1] "FORMAT TRES LAID"

> tolower("RENdS-MoI PLUs PeTIt")
[1] "rends-moi plus petit"

Répétitions et motifs

rep() vous permet de faire des répétitions sur mesure. Vous pouvez spécifier le motif vous-même, avec le nombre de répétitions ou encore la longueur totale désirée avec length.out.
Voici une chanson pop très répétitive (répéter 4 fois d’une voix nasillarde) :

> rep(c("I'm like a bird, I'll only fly away", "I don't know where my soul is, I don't know where my home is"),time=4)
[1] "I'm like a bird, I'll only fly away"
[2] "I don't know where my soul is, I don't know where my home is"
[3] "I'm like a bird, I'll only fly away"
[4] "I don't know where my soul is, I don't know where my home is"
[5] "I'm like a bird, I'll only fly away"
[6] "I don't know where my soul is, I don't know where my home is"
[7] "I'm like a bird, I'll only fly away"
[8] "I don't know where my soul is, I don't know where my home is"