Hugo Varet, Olivier Kirsh et Jacques van Helden
2019-01-15
Définir une variable qui indique le chemin du dossier de travail
work.dir <- "~/intro_R"
S’il n’existe pas encore, créer le dossier de travail. (Commande Unix équivalente: "mkdir -p ~/intro_R")
dir.create(work.dir, recursive = TRUE, showWarnings = FALSE)
Aller dans ce dossier de travail. (Commande Unix équivalente: "cd ~/intro_R")
setwd(work.dir)
Où suis-je ? (Commande Unix équivalente: "pwd")
getwd()
Qu'y a-t-il par ici ? (Commande Unix équivalente: "ls")
list.files()
2 + 3
4 * 5
6 / 4
a <- 2 ## Assigner une valeur à une variable
print(a) ## Afficher la valeur de la variable a
b <- 3 ## Assigner une valeur à une seconde variable
c <- a + b ## Effectuer un calcul avec 2 variables
print(c) ## Afficher le contenu de la variable c
a <- 7 ## Changer la valeur de a
print(c) ## Note: le contenu de c n'est pas modifié
La commande download()
permet de télécharger un fichier à partir d'un serveur.
## download.file(url = "https://goo.gl/9QVAg6", destfile = "expression.txt")
## download.file(url = "https://goo.gl/NQWnHg", destfile = "annotation.csv")
Charger le contenu du fichier "expression.txt" dans une variable nommée "exprs".
exprs <- read.table(file = "expression.txt", header = TRUE, sep = "\t")
Accéder à l'aide d'une fonction
help(read.table)
Notation alternative
?read.table
Imprimer toutes les valeurs.
print(exprs)
id WT1 WT2 KO1 KO2
1 ENSG00000034510 235960 94264 202381 91336
2 ENSG00000064201 116 71 64 56
3 ENSG00000065717 118 174 124 182
4 ENSG00000099958 450 655 301 472
5 ENSG00000104164 4736 5019 4845 4934
6 ENSG00000104783 9002 8623 7720 7142
7 ENSG00000105229 1295 2744 1113 2887
8 ENSG00000105723 3353 7449 3589 7202
9 ENSG00000116199 2044 4525 2604 4902
10 ENSG00000118939 7022 2526 6269 3068
11 ENSG00000119285 15783 17359 18591 20077
12 ENSG00000121680 3133 2775 2045 2796
13 ENSG00000125384 1380 3079 869 2419
14 ENSG00000129562 12089 7958 10708 7683
15 ENSG00000129932 1744 2247 1513 3104
16 ENSG00000134198 122 66 44 16
17 ENSG00000135452 635 427 662 291
18 ENSG00000140416 83 246 136 267
19 ENSG00000147274 16013 17642 15055 18804
20 ENSG00000148090 552 1062 615 1082
21 ENSG00000148248 62324 33973 56862 37710
22 ENSG00000157036 1225 1475 1275 1373
23 ENSG00000157869 1201 1034 1025 858
24 ENSG00000159433 31 788 30 675
25 ENSG00000161692 695 1825 746 1851
26 ENSG00000167005 26866 23111 24888 22661
27 ENSG00000168517 273 112 190 77
28 ENSG00000169570 202 181 207 209
29 ENSG00000172216 3515 1981 3204 3174
30 ENSG00000175221 1988 4788 2115 5306
31 ENSG00000183161 2238 974 2089 996
32 ENSG00000185324 1236 2163 1048 2024
33 ENSG00000188985 3415 1703 3587 2096
34 ENSG00000196867 209 189 293 192
35 ENSG00000197081 14741 36309 14941 29645
36 ENSG00000198586 1216 4545 1660 3932
37 ENSG00000214121 4044 2575 3019 2506
38 ENSG00000225630 1405 8135 1569 7866
39 ENSG00000226742 158 94 153 178
40 ENSG00000238241 90 43 122 143
41 ENSG00000248751 518 718 411 597
42 ENSG00000250202 261 163 177 191
43 ENSG00000251106 94 114 63 86
44 ENSG00000253991 77 78 134 92
45 ENSG00000254470 3025 3707 2558 4066
46 ENSG00000262814 15470 11450 11656 13821
47 ENSG00000267228 3801 2465 2787 2301
48 ENSG00000267699 1488 1086 1374 939
49 ENSG00000269293 424 162 310 120
50 ENSG00000279329 55 76 58 70
head(exprs)
id WT1 WT2 KO1 KO2
1 ENSG00000034510 235960 94264 202381 91336
2 ENSG00000064201 116 71 64 56
3 ENSG00000065717 118 174 124 182
4 ENSG00000099958 450 655 301 472
5 ENSG00000104164 4736 5019 4845 4934
6 ENSG00000104783 9002 8623 7720 7142
head(exprs, n = 15)
id WT1 WT2 KO1 KO2
1 ENSG00000034510 235960 94264 202381 91336
2 ENSG00000064201 116 71 64 56
3 ENSG00000065717 118 174 124 182
4 ENSG00000099958 450 655 301 472
5 ENSG00000104164 4736 5019 4845 4934
6 ENSG00000104783 9002 8623 7720 7142
7 ENSG00000105229 1295 2744 1113 2887
8 ENSG00000105723 3353 7449 3589 7202
9 ENSG00000116199 2044 4525 2604 4902
10 ENSG00000118939 7022 2526 6269 3068
11 ENSG00000119285 15783 17359 18591 20077
12 ENSG00000121680 3133 2775 2045 2796
13 ENSG00000125384 1380 3079 869 2419
14 ENSG00000129562 12089 7958 10708 7683
15 ENSG00000129932 1744 2247 1513 3104
Dimensions
dim(exprs) ## Dimensions
ncol(exprs) ## Nombre de colonnes
nrow(exprs) ## Nombre de lignes
Noms des lignes et colonnes
colnames(exprs)
rownames(exprs)
summary(exprs)
id WT1 WT2 KO1 KO2
ENSG00000034510: 1 Min. : 31 Min. : 43.0 Min. : 30.0 Min. : 16.0
ENSG00000064201: 1 1st Qu.: 264 1st Qu.: 203.2 1st Qu.: 228.5 1st Qu.: 223.5
ENSG00000065717: 1 Median : 1338 Median : 1903.0 Median : 1324.5 Median : 2060.0
ENSG00000099958: 1 Mean : 9358 Mean : 6498.6 Mean : 8356.0 Mean : 6489.5
ENSG00000104164: 1 3rd Qu.: 3730 3rd Qu.: 4727.2 3rd Qu.: 3491.2 3rd Qu.: 4926.0
ENSG00000104783: 1 Max. :235960 Max. :94264.0 Max. :202381.0 Max. :91336.0
(Other) :44
Valeurs stockées dans la colonne nommée "WT1"
exprs$WT1
Notation alternative
exprs[, "WT1"] ## Sélection de la colonne WT1
Sélection de plusieurs colonnes.
exprs[, c("WT1", "WT2")]
Sélection de colonnes par leur indice
exprs[, 2]
exprs[, c(2, 3)]
hist(exprs$WT1)
hist(log(exprs$WT1))
plot(x = log(exprs$WT1), y = log(exprs$KO1))
plot(x = log(exprs$WT1), ## données pour l’abscisse
y = log(exprs$KO1), ## données pour l’ordonnée
main = "Expression KO1 vs WT1", ## Titre principal
xlab = "WT1", ## légende de l’axe X
ylab = "KO1", ## légende de l’axe Y
pch = 16, ## caractère pour marquer les points
las = 1, ## écrire les échelles horizontalement
col = "red") ## couleur des points
grid() ## Ajout d’une grille
abline(a = 0, b = 1) ## Ajouter la droite X = Y (intercept a = 0, pente b = 1).
Sélection des lignes 4 et 11 du tableau des expressions
exprs[c(4, 11), ]
Indices des lignes correspondant aux IDs ENSG00000253991 et ENSG00000099958
which(exprs$id %in% c("ENSG00000253991", "ENSG00000099958"))
Afficher les lignes correspondantes
exprs[which(exprs$id %in% c("ENSG00000253991", "ENSG00000099958")), ]
Calcul de moyennes par ligne (rowMeans
) pour un sous-ensemble donné des colonnes (WT1 et WT2).
rowMeans(exprs[,c("WT1","WT2")])
Ajout de colonnes avec les expressions moyennes des WT et des KO.
exprs$meanWT <- rowMeans(exprs[,c("WT1","WT2")])
exprs$meanKO <- rowMeans(exprs[,c("KO1","KO2")])
head(exprs) ## Check the result
Fold-change KO vs WT
exprs$FC <- exprs$meanKO / exprs$meanWT
head(exprs) ## Check the result
Moyenne de tous les échantillons
exprs$mean <- rowMeans(exprs[,c("WT1","WT2","KO1","KO2")])
\(M\) est le logarithme en base 2 du rapport d'expression.
\[M = log_{2} (\text{FC}) = log_{2} \left( \frac{\text{KO}}{\text{WT}} \right) = log_2 (\text{KO}) - log_2(\text{WT})\]
exprs$M <- log2(exprs$FC)
\(A\) (average intensity) est la moyenne des logarithmes des valeurs d'expression.
\[A = \frac{1}{2} log_2 (\text{KO} \cdot \text{WT}) = \frac{1}{2} \left( log_2 (\text{KO}) + log_2(\text{WT}) \right)\]
exprs$A <- rowMeans(log2(exprs[,c("meanWT", "meanKO")]))
plot(x = exprs$A, y = exprs$M, main = "MA plot", las = 1,
col = "blue", pch = 16, xlab = "A = intensity", ylab = "M = log2FC")
grid(lty = "solid", col = "lightgray")
abline(h = 0)
annot <- read.table(file = "annotation.csv", header = TRUE, sep = ";")
dim(annot) ## Vérifier les dimensions
head(annot) ## Afficher quelques lignes
Combien de gènes par chromosome ?
table(annot$chr)
Question: combien de gènes sur le chromosome 8 ? Et sur le X ?
barplot(sort(table(annot$chr)), horiz = TRUE, las = 1,
main = "Genes per chromosome", ylab = "Chromosome",
col = "lightblue", xlab = "Number of genes")
1ere étape: fusionner les deux tableaux exprs et annot
exprs.annot <- merge(exprs, annot, by = "id")
head(exprs.annot)
2eme étape: sous-ensemble des lignes pour lesquelles chr vaut 8
exprs8 <- exprs.annot[which(exprs.annot$chr == 8),]
print(exprs8)
write.table(x = exprs8, file = "exprs8.txt", sep = "\t",
row.names = TRUE, col.names = NA)