Le symbole “>” est l’invite de commande (“prompt”) de R. Ilsignifie que R est prêt à recevoir une nouvelle instruction. Exemple:
## Quelques calculs
2 + 3
## [1] 5
2 * 3
## [1] 6
2 / 3
## [1] 0.6666667
Quand vous entrez une commande incomplète, R affiche une invite +
, qui indique qu’il attend que vous complétiez votre commande
2 *
Si vous êtes coincés avec une invite +
, vous devez terminer la commande pour vous tirer d’affaire. Dans ce cas-ci, tapez par exemple taper 7
puis ENTER.
Si on envoie à R un calcul qui dure un certain temps, pendant le calcul il n’affiche aucun symbole d’invite de commande.
Un exemple de commande qui prend quelques secondes (nous expliquerons plus bas en quoi consistent ces fonctions).
Note: le symbole #
permet d’écrire des commentaires, i.e. du texte non interprété par R.
## Calculer la moyenne de 100 millions de nombres
## tirés au hasard selon une distribution normale
mean(rnorm(100000000))
## [1] 0.0002319518
Pendant quelques secondes rien ne se passe … puis la réponse s’affiche.
Le symbole <-
assigne une valeur à une variable. Si cette variable n’a pas encore déclarée, elle est créée au passage (un espace mémoire lui est réservé).
a <- 2 ## Assignation d'une valeur à une variable
b = 3 ## Notation équivalente acceptée mais pas recommandée
Plutôt que a,b,c , on recommande de nommer les varables de façon explicite
resultat <- a * b + a + b ## Le résultat est stocké dans une variable nommée resultat
print(resultat)
## [1] 11
Attention ! Les noms de variables sont sensibles à la casse ! La commande suivante retourne une erreur.
print(Resultat)
Error in print(Resultat) : object ‘Resultat’ not found
ma_nouvelle_variable_avec_un_nom_a_rallonge <- 10
Attention: certains noms sont déjà utilisés pour des fonctions/objets R. Il ne faut donc pas les utiliser comme noms de variables. On les qualifie de noms réservés.
c # créer un vecteur
t # transposer une matrice
sum # fonction somme
mean # fonction moyenne
TRUE # booléen
FALSE # booléen
T # booléen
F # booléen
NA # not available
NaN # not a number (par exemple log(-1))
Inf # infini (par exemple 1/0)
NULL # objet nul
pi # 3.14...
letters # 26 lettres minuscules
LETTERS # 26 lettres majuscules
Par défaut les nombres sont considérés comme des variables numériques de type “floating point” (variables réelles), même si leur valeur particulière est entière.
# "double precision floating point numbers"
x <- 3
print(x)
## [1] 3
mode(x)
## [1] "numeric"
typeof(x)
## [1] "double"
On peut cependant explicitement déclarer une variable entière avec as.integer()
y <- as.integer(2)
print(y)
## [1] 2
mode(y)
## [1] "numeric"
typeof(y)
## [1] "integer"
Intérêt: les variables de type “Integer” utilisent moins d’espace mémoire que les “Floating point”.
Les variables de type “character” permettent de stocker des chaînes de caractères.
x <- "chaîne de caractères, toujours entre guillemets"
print(x)
## [1] "chaîne de caractères, toujours entre guillemets"
y <- 'ou avec des guillemets simples'
print(y)
## [1] "ou avec des guillemets simples"
mode(x) ## type de contenu de la variable x
## [1] "character"
nchar(x) ## lontgueur d'une chaîne de caractères
## [1] 47
paste(x, y, sep=" / ") ## concaténation de variables de type character
## [1] "chaîne de caractères, toujours entre guillemets / ou avec des guillemets simples"
x <- TRUE # ou T ou FALSE ou F
print(x)
## [1] TRUE
mode(x)
## [1] "logical"
# sera utile pour tester des choses :
# if (condition) {
# faire ça
# } else {
# faire autre chose
# }
Un vecteur permet de stocker dans une seule variable une liste d’élements du même type (numeric, character…).
Un vecteur peut contenir des valeurs de différents types: entiers, réells, Booléens, char, …
u <- c(2, 4, 5, 1)
print(u)
## [1] 2 4 5 1
v <- c(10, 5, 2, 2)
print(v)
## [1] 10 5 2 2
w <- c("Pierre", "Paul", "Jacques", "Henri")
print(w)
## [1] "Pierre" "Paul" "Jacques" "Henri"
l <- c(TRUE, FALSE, FALSE, TRUE)
print(l)
## [1] TRUE FALSE FALSE TRUE
length(u)
## [1] 4
mode(u)
## [1] "numeric"
mode(w)
## [1] "character"
mode(l)
## [1] "logical"
u[2]
## [1] 4
u[-2]
## [1] 2 5 1
u[c(1, 3)]
## [1] 2 5
u[l]
## [1] 2 1
u >= 3
## [1] FALSE TRUE TRUE FALSE
u[which(u >= 3)]
## [1] 4 5
v %in% c(2, 5)
## [1] FALSE TRUE TRUE TRUE
v[which(v %in% c(2, 5))]
## [1] 5 2 2
sort(u)
## [1] 1 2 4 5
summary(u)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 1.75 3.00 3.00 4.25 5.00
sum(u)
## [1] 12
mean(u)
## [1] 3
u + v
## [1] 12 9 7 3
u * v
## [1] 20 20 10 2
u / v
## [1] 0.2 0.8 2.5 0.5
cbind(u, v)
## u v
## [1,] 2 10
## [2,] 4 5
## [3,] 5 2
## [4,] 1 2
rbind(u, v)
## [,1] [,2] [,3] [,4]
## u 2 4 5 1
## v 10 5 2 2
1:10
## [1] 1 2 3 4 5 6 7 8 9 10
seq(from=1, to=100, by=10)
## [1] 1 11 21 31 41 51 61 71 81 91
seq(from=1, to=100, length=4)
## [1] 1 34 67 100
rep(x=c(1, 2), times=3)
## [1] 1 2 1 2 1 2
rep(x=c(1, 2), each=3)
## [1] 1 1 1 2 2 2
u <- c(4, NA, 5, 2, NA, 3)
mean(u)
## [1] NA
mean(u, na.rm=TRUE)
## [1] 3.5
Les structures de données de type factor
permettent de traiter des listes d’éléments dont les valeurs appartiennent à un ensemble défini. Ces valeurs sont indexées pour assurer une efficacité maximale du traitement informatique.
## Un vecteur
mentions <- c("Passable", "AB", "AB", "B", "TB", "TB", "Passable", "B", "Passable", "TB")
print(mentions)
## [1] "Passable" "AB" "AB" "B" "TB" "TB"
## [7] "Passable" "B" "Passable" "TB"
# vecteur avec des catégories
f <- factor(mentions)
print(f) # Afficher le contenu du facteur
## [1] Passable AB AB B TB TB Passable
## [8] B Passable TB
## Levels: AB B Passable TB
levels(f) # Enumérer les catégories du facteur
## [1] "AB" "B" "Passable" "TB"
table(f) # Dénombrer les éléments par catégorie
## f
## AB B Passable TB
## 2 2 3 3
# notion d'ordre
f <- factor(mentions, levels=c("Passable", "AB", "B", "TB"))
print(f) # Afficher le contenu du facteur
## [1] Passable AB AB B TB TB Passable
## [8] B Passable TB
## Levels: Passable AB B TB
levels(f) # Enumérer les catégories du facteur
## [1] "Passable" "AB" "B" "TB"
table(f) # Dénombrer les éléments par catégorie
## f
## Passable AB B TB
## 3 2 2 3
# NA et catégories non représentées
f <- factor(c("Passable", NA, "AB", "AB", NA, "B"), levels=c("Passable", "AB", "B", "TB"))
print(f)
## [1] Passable <NA> AB AB <NA> B
## Levels: Passable AB B TB
levels(f)
## [1] "Passable" "AB" "B" "TB"
table(f) # Où sont passées les valeurs NA ?
## f
## Passable AB B TB
## 1 2 1 0
## Imprimer les valeurs NA seulement si elles existent
table(f, useNA="ifany")
## f
## Passable AB B TB <NA>
## 1 2 1 0 2
# tableau à N lignes et P colonnes avec des éléments du même type (numeric, character...)
m <- matrix(rnorm(30), nrow=6, ncol=5)
print(m)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.4961884 -0.02021720 -1.1746713 -1.19721072 1.1730014
## [2,] 0.7053770 -0.22150861 0.3411642 -0.56351229 0.8083728
## [3,] -0.5022711 -0.01906574 -0.6840956 0.12638131 0.6241060
## [4,] -0.0370270 0.41753686 0.4535602 0.79141006 -1.4852059
## [5,] 0.2178930 0.81342036 -0.3773423 -0.06359499 1.4941685
## [6,] -0.3649172 -0.09517266 -2.3805158 0.45423292 -1.4217601
n <- matrix(c("a","b","c","d","e","f"), ncol=3, byrow=TRUE)
print(n)
## [,1] [,2] [,3]
## [1,] "a" "b" "c"
## [2,] "d" "e" "f"
# caractéristiques d'une matrice
ncol(m)
## [1] 5
nrow(m)
## [1] 6
dim(m)
## [1] 6 5
length(m)
## [1] 30
mode(m)
## [1] "numeric"
mode(n)
## [1] "character"
# opérations sur des matrices
mat1 <- matrix(1:6, nrow=2, ncol=3)
mat2 <- matrix(rnorm(6), nrow=2, ncol=3)
print(mat1)
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
print(mat2)
## [,1] [,2] [,3]
## [1,] 0.3411606 0.4112165 -0.06003983
## [2,] -1.2436369 1.8141770 -0.02260743
# élément par élément
mat1 + mat2
## [,1] [,2] [,3]
## [1,] 1.3411606 3.411216 4.939960
## [2,] 0.7563631 5.814177 5.977393
mat1 * mat2
## [,1] [,2] [,3]
## [1,] 0.3411606 1.233649 -0.3001991
## [2,] -2.4872738 7.256708 -0.1356446
# produit matriciel (attention aux dimensions)
mat1 %*% t(mat2)
## [,1] [,2]
## [1,] 1.274611 4.085857
## [2,] 1.966948 4.633789
t(mat1) %*% mat2
## [,1] [,2] [,3]
## [1,] -2.146113 4.039570 -0.1052547
## [2,] -3.951066 8.490357 -0.2705492
## [3,] -5.756018 12.941144 -0.4358437
# somme, moyenne, ...
sum(mat1) # de tous les éléments
## [1] 21
rowSums(mat1) # des éléments de chaque ligne
## [1] 9 12
colSums(mat1) # des éléments de chaque colonne
## [1] 3 7 11
mean(mat1)
## [1] 3.5
rowMeans(mat1)
## [1] 3 4
colMeans(mat1)
## [1] 1.5 3.5 5.5
# sélection/suppression d'éléments d'une matrice
mat1[, c(2, 3)]
## [,1] [,2]
## [1,] 3 5
## [2,] 4 6
mat1[1,]
## [1] 1 3 5
mat1[1, c(2, 3)]
## [1] 3 5
# permet de stocker des objets de types/longueurs différents
l1 <- list(n = c(TRUE, FALSE),
v = c(3, 4),
r = c("toto","plop", "tutu"),
mat1)
print(l1)
## $n
## [1] TRUE FALSE
##
## $v
## [1] 3 4
##
## $r
## [1] "toto" "plop" "tutu"
##
## [[4]]
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
length(l1)
## [1] 4
names(l1)
## [1] "n" "v" "r" ""
# liste contenant une liste
l2 <- list(a="chaîne de caractères", l1=l1)
print(l2)
## $a
## [1] "chaîne de caractères"
##
## $l1
## $l1$n
## [1] TRUE FALSE
##
## $l1$v
## [1] 3 4
##
## $l1$r
## [1] "toto" "plop" "tutu"
##
## $l1[[4]]
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
# extraction d'éléments d'une liste
l1$n
## [1] TRUE FALSE
l2$l1
## $n
## [1] TRUE FALSE
##
## $v
## [1] 3 4
##
## $r
## [1] "toto" "plop" "tutu"
##
## [[4]]
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
l2$l1$v
## [1] 3 4
l2[1]
## $a
## [1] "chaîne de caractères"
l2[[1]]
## [1] "chaîne de caractères"
is.list(l2[1])
## [1] TRUE
is.list(l2[[1]])
## [1] FALSE
# tableau dont les colonnes ne sont pas nécessairement du même type (numeric, character...)
d <- data.frame(nom=c("Pierre", "Paul", "Henri", "Mathieu"),
taille=c(165, 168, 163, 170),
poids=c(58, 60, 62, 68))
print(d)
## nom taille poids
## 1 Pierre 165 58
## 2 Paul 168 60
## 3 Henri 163 62
## 4 Mathieu 170 68
class(d)
## [1] "data.frame"
typeof(d) # une data.frame est un cas particulier d'une liste
## [1] "list"
# caractéristiques d'une data.frame
ncol(d)
## [1] 3
nrow(d)
## [1] 4
names(d)
## [1] "nom" "taille" "poids"
length(d)
## [1] 3
# sélection de colonnes
d$taille
## [1] 165 168 163 170
d[, "taille"]
## [1] 165 168 163 170
d[, c("nom", "taille")]
## nom taille
## 1 Pierre 165
## 2 Paul 168
## 3 Henri 163
## 4 Mathieu 170
# sélection de lignes
d[c(1, 3:4), ]
## nom taille poids
## 1 Pierre 165 58
## 3 Henri 163 62
## 4 Mathieu 170 68
d$nom == "Pierre"
## [1] TRUE FALSE FALSE FALSE
d[which(d$nom == "Pierre"),]
## nom taille poids
## 1 Pierre 165 58
# résumé statistique
summary(d)
## nom taille poids
## Henri :1 Min. :163.0 Min. :58.0
## Mathieu:1 1st Qu.:164.5 1st Qu.:59.5
## Paul :1 Median :166.5 Median :61.0
## Pierre :1 Mean :166.5 Mean :62.0
## 3rd Qu.:168.5 3rd Qu.:63.5
## Max. :170.0 Max. :68.0
# fusion de deux data frames
d2 <- data.frame(nom=c("Paul","Henri","Louis"), age=c(34, 29, 47))
print(d2)
## nom age
## 1 Paul 34
## 2 Henri 29
## 3 Louis 47
merge(x=d, y=d2, by="nom")
## nom taille poids age
## 1 Henri 163 62 29
## 2 Paul 168 60 34
merge(x=d, y=d2, by="nom", all=TRUE)
## nom taille poids age
## 1 Henri 163 62 29
## 2 Mathieu 170 68 NA
## 3 Paul 168 60 34
## 4 Pierre 165 58 NA
## 5 Louis NA NA 47
merge(x=d, y=d2, by="nom", all.x=TRUE)
## nom taille poids age
## 1 Henri 163 62 29
## 2 Mathieu 170 68 NA
## 3 Paul 168 60 34
## 4 Pierre 165 58 NA
merge(x=d, y=d2, by="nom", all.y=TRUE)
## nom taille poids age
## 1 Henri 163 62 29
## 2 Paul 168 60 34
## 3 Louis NA NA 47
# création d'une nouvelle variable
print(d)
## nom taille poids
## 1 Pierre 165 58
## 2 Paul 168 60
## 3 Henri 163 62
## 4 Mathieu 170 68
d$age <- c(35, 42, 31, 28)
d$classe_poids <- ifelse(test=d$poids >= 60, yes=">=60", no="<60")
print(d)
## nom taille poids age classe_poids
## 1 Pierre 165 58 35 <60
## 2 Paul 168 60 42 >=60
## 3 Henri 163 62 31 >=60
## 4 Mathieu 170 68 28 >=60
help(read.table)
?read.table
La commande R getwd()
est équivalente de la commande Unix pwd
vue hier.
# où suis-je ? équivalent de la commande Unix 'pwd'
getwd()
## [1] "/Users/jvanheld/Google Drive/EBAI_Roscoff/EBAI_2017-11/Cours/04_R"
R | Unix |
---|---|
getwd() |
pwd |
La commande R setwd()
est équivalente de la commande Unix cd
vue hier.
# changement de répertoire courant: équivalent de la commande unix 'cd <path>'
# Chemin relativ
setwd("chemin/acces/au/nouveau/repertoire/")
# Chemin absolu
setwd("/home/hugo/chemin/acces/au/nouveau/repertoire/")
R | Unix |
---|---|
setwd() |
cd |
R | Unix |
---|---|
list.files() |
ls |
file.copy() |
cp |
# quelques manipulations de fichiers
f <- list.files(path="/projet/sbr/ggb/intro_R/", full.names=TRUE)
print(f)
## character(0)
file.copy(from=f, to=getwd())
## logical(0)
Vérifier ensuite que les fichiers ed données ont bien été copiés dans l’espace de travail.
list.files(path=getwd())
## [1] "Icon\r"
## [2] "intro_R"
## [3] "intro_R_Roscoff_debug.html"
## [4] "intro_R_Roscoff_debug.Rmd"
## [5] "intro_R_Roscoff.html"
## [6] "intro_R_Roscoff.pdf"
## [7] "intro_R_Roscoff.r"
## [8] "intro_R_Roscoff.Rmd"
## [9] "mon_environnement.RData"
## [10] "objet_a.RData"
## [11] "prev"
## [12] "rnaseq_data.csv"
## [13] "rnaseq_data.txt"
## [14] "rnaseq_export.txt"
## [15] "Saccharomyces_cerevisiae.R64-1-1.90.gtf"
## [16] "slides_intro_R_roscoff_2017.odp.gslides"
## [17] "slides_intro_R_roscoff_2017.pdf"
list.files() ## Commande équivalente, plus légère
## [1] "Icon\r"
## [2] "intro_R"
## [3] "intro_R_Roscoff_debug.html"
## [4] "intro_R_Roscoff_debug.Rmd"
## [5] "intro_R_Roscoff.html"
## [6] "intro_R_Roscoff.pdf"
## [7] "intro_R_Roscoff.r"
## [8] "intro_R_Roscoff.Rmd"
## [9] "mon_environnement.RData"
## [10] "objet_a.RData"
## [11] "prev"
## [12] "rnaseq_data.csv"
## [13] "rnaseq_data.txt"
## [14] "rnaseq_export.txt"
## [15] "Saccharomyces_cerevisiae.R64-1-1.90.gtf"
## [16] "slides_intro_R_roscoff_2017.odp.gslides"
## [17] "slides_intro_R_roscoff_2017.pdf"
La commande read.table()
permet de charger le contenu d’un fichier dans une variable.
Le fichier rna_seq.txt
contient des valeurs séparées par des tabulations (symbole \t
).
# Charger le fichier rna_seq
rna <- read.table("rnaseq_data.txt", sep="\t", header=TRUE)
print(rna) # Vérifier le contenu
## geneid name WT1 WT2 WT3 KO1 KO2 KO3
## 1 ENSG00000000003 TSPAN6 64 55 37 62 45 50
## 2 ENSG00000000005 TNMD 0 0 0 0 0 0
## 3 ENSG00000000419 DPM1 8370 5420 6154 7823 5283 5849
## 4 ENSG00000000457 SCYL3 970 811 567 950 669 545
## 5 ENSG00000000460 C1orf112 1689 1113 981 2065 1082 1264
## 6 ENSG00000000938 FGR 44 25 10 24 5 1
## 7 ENSG00000000971 CFH 205 27 32 20 5 7
## 8 ENSG00000001036 FUCA2 1735 688 661 1543 491 414
## 9 ENSG00000001084 GCLC 3526 5007 3802 4207 4583 3514
## 10 ENSG00000001167 NFYA 4730 5398 3725 4556 5408 4173
## 11 ENSG00000001460 STPG1 360 368 265 422 348 302
## 12 ENSG00000001461 NIPAL3 2260 2509 1851 2527 2283 1884
## 13 ENSG00000001497 LAS1L 6007 9238 5271 5469 10413 7290
## 14 ENSG00000001561 ENPP4 1507 795 1240 1427 734 1045
## 15 ENSG00000001617 SEMA3F 1 3 0 5 8 3
## 16 ENSG00000001626 CFTR 0 0 0 0 0 0
## 17 ENSG00000001629 ANKIB1 1855 3210 1515 2182 3073 1567
## 18 ENSG00000001630 CYP51A1 7933 2837 3119 8635 3484 3192
## 19 ENSG00000001631 KRIT1 1200 2225 1115 1491 1872 1183
## 20 ENSG00000002016 RAD52 159 207 76 196 211 93
## 21 ENSG00000002079 MYH16 0 0 0 0 1 0
## 22 ENSG00000002330 BAD 1905 1854 1785 1322 1900 1979
## 23 ENSG00000002549 LAP3 22969 14296 15085 19888 14524 16968
## 24 ENSG00000002586 CD99 16856 27742 22743 14489 21501 18203
## 25 ENSG00000002587 HS3ST1 16 13 6 19 4 1
## 26 ENSG00000002726 AOC1 8 0 0 3 0 0
## 27 ENSG00000002745 WNT16 58 25 0 28 9 2
## 28 ENSG00000002746 HECW1 0 0 0 0 0 2
## 29 ENSG00000002822 MAD1L1 753 1989 776 738 2396 1248
## 30 ENSG00000002834 LASP1 10527 21095 11236 11746 22994 13958
## 31 ENSG00000002919 SNX11 4362 4239 3703 3724 3887 3795
## 32 ENSG00000002933 TMEM176A 1 0 5 6 2 3
## 33 ENSG00000003056 M6PR 11037 7346 7685 10150 7153 8069
## 34 ENSG00000003096 KLHL13 66 53 26 97 134 87
## 35 ENSG00000003137 CYP26B1 4 0 4 1 0 2
## 36 ENSG00000003147 ICA1 156 24 26 145 33 56
## 37 ENSG00000003249 DBNDD1 27 32 17 8 49 11
## 38 ENSG00000003393 ALS2 1617 1664 1210 1427 1567 1328
## 39 ENSG00000003400 CASP10 904 764 409 1215 1004 532
## 40 ENSG00000003402 CFLAR 39344 56308 41971 30152 37386 27284
## 41 ENSG00000003436 TFPI 5 1 8 45 16 12
## 42 ENSG00000003509 NDUFAF7 877 1106 716 821 977 570
## 43 ENSG00000003756 RBM5 2502 7437 2398 2770 6499 2745
## 44 ENSG00000003987 MTMR7 0 0 2 0 1 2
## 45 ENSG00000003989 SLC7A2 5 4 0 0 2 0
## 46 ENSG00000004059 ARF5 12018 8963 9746 9462 9168 9353
## 47 ENSG00000004139 SARM1 1154 2913 1247 1041 2420 1262
## 48 ENSG00000004142 POLDIP2 15498 15945 12886 12785 18109 16509
## 49 ENSG00000004399 PLXND1 32 137 55 28 128 102
## 50 ENSG00000004455 AK2 19857 17803 16815 17128 18649 17445
print(head(rna)) # N'imprimer que le début du fichier
## geneid name WT1 WT2 WT3 KO1 KO2 KO3
## 1 ENSG00000000003 TSPAN6 64 55 37 62 45 50
## 2 ENSG00000000005 TNMD 0 0 0 0 0 0
## 3 ENSG00000000419 DPM1 8370 5420 6154 7823 5283 5849
## 4 ENSG00000000457 SCYL3 970 811 567 950 669 545
## 5 ENSG00000000460 C1orf112 1689 1113 981 2065 1082 1264
## 6 ENSG00000000938 FGR 44 25 10 24 5 1
Le fichier rna_seq.csv
contient des valeurs séparées par des points-virgules (en dépit de son nom “comma-separated values”).
sep
permet de spécifier un séparateur de colonnes.col.names
permet d’assigner des noms aux colonnes pendant la lecture des données.# charger le fichier rnaseq_data.csv
rna2 <- read.table(
"rnaseq_data.csv", sep=";", header=FALSE,
col.names=c("geneid","name","WT1","WT2","WT3","KO1","KO2","KO3"))
print(head(rna2))
## geneid name WT1 WT2 WT3 KO1 KO2 KO3
## 1 ENSG00000000003 TSPAN6 64 55 37 62 45 50
## 2 ENSG00000000005 TNMD 0 0 0 0 0 0
## 3 ENSG00000000419 DPM1 8370 5420 6154 7823 5283 5849
## 4 ENSG00000000457 SCYL3 970 811 567 950 669 545
## 5 ENSG00000000460 C1orf112 1689 1113 981 2065 1082 1264
## 6 ENSG00000000938 FGR 44 25 10 24 5 1
# exporter des données dans un fichier (qui sera écrasé s'il existe déjà !)
write.table(rna, file="rnaseq_export.txt", sep=" ", col.names=FALSE, row.names=FALSE)
# Liste des objets présents dans l'environnement R
ls()
## [1] "a"
## [2] "b"
## [3] "d"
## [4] "d2"
## [5] "f"
## [6] "l"
## [7] "l1"
## [8] "l2"
## [9] "m"
## [10] "ma_nouvelle_variable_avec_un_nom_a_rallonge"
## [11] "mat1"
## [12] "mat2"
## [13] "mentions"
## [14] "n"
## [15] "resultat"
## [16] "rna"
## [17] "rna2"
## [18] "u"
## [19] "v"
## [20] "w"
## [21] "x"
## [22] "y"
# Suppression d'un objet (utile si particulièrement lourd)
a <- 3
print(a)
## [1] 3
rm(a)
print(a)
Error in print(a) : object ‘a’ not found
a <- 3
print(a)
## [1] 3
La commande save.image()
enregistre sur disque une copie de l’environnement complet, c’est-à-dire tous les objets existant dans l’espace mémoire de R.
# sauvegarde de tout l'environnement, i.e. tous les objets existants
save.image(file="mon_environnement.RData")
Attention, en faisant ceci on perd tout le résultat du travail précédent (chargement des tables de comptage RNA-seq, …)
# suppression de tous les éléments présents dans la session R
rm(list=ls())
ls() # Vérification: tout a disparu :-(
## character(0)
load("mon_environnement.RData") # On recharge l'environnement
ls() # Vérification: tout est revenu :-)
## [1] "a"
## [2] "b"
## [3] "d"
## [4] "d2"
## [5] "f"
## [6] "l"
## [7] "l1"
## [8] "l2"
## [9] "m"
## [10] "ma_nouvelle_variable_avec_un_nom_a_rallonge"
## [11] "mat1"
## [12] "mat2"
## [13] "mentions"
## [14] "n"
## [15] "resultat"
## [16] "rna"
## [17] "rna2"
## [18] "u"
## [19] "v"
## [20] "w"
## [21] "x"
## [22] "y"
# Vérifions le contenu de la variable a
print(a)
## [1] 3
# sauvegarde d'un objet spécifique
save(a, file="objet_a.RData")
# Effacçons le contenu de la variable a
rm(a)
print(a)
Error in print(a) : object ‘a’ not found
# chargement d'un objet/environnement
load("objet_a.RData")
print(a)
## [1] 3
# plot y vs x
plot(x=d$taille, y=d$poids)
plot(formula=d$poids ~ d$taille)
plot(formula=poids ~ taille, data=d)
# boite à moustache d'une série de valeurs
boxplot(d$poids)
# histogramme d'une série de valeurs
hist(d$poids)
# diagramme en bâtons
table(d$classe_poids)
##
## <60 >=60
## 1 3
barplot(table(d$classe_poids), col=c("lightblue","orange"))
# customisation rapide
plot(formula=poids ~ taille, data=d, pch=16, col="red",
main="Poids vs taille de 4 individus", xlab="Taille (cm)", ylab="Poids (kg)")
# liste des couleurs disponibles
colors()
## [1] "white" "aliceblue" "antiquewhite"
## [4] "antiquewhite1" "antiquewhite2" "antiquewhite3"
## [7] "antiquewhite4" "aquamarine" "aquamarine1"
## [10] "aquamarine2" "aquamarine3" "aquamarine4"
## [13] "azure" "azure1" "azure2"
## [16] "azure3" "azure4" "beige"
## [19] "bisque" "bisque1" "bisque2"
## [22] "bisque3" "bisque4" "black"
## [25] "blanchedalmond" "blue" "blue1"
## [28] "blue2" "blue3" "blue4"
## [31] "blueviolet" "brown" "brown1"
## [34] "brown2" "brown3" "brown4"
## [37] "burlywood" "burlywood1" "burlywood2"
## [40] "burlywood3" "burlywood4" "cadetblue"
## [43] "cadetblue1" "cadetblue2" "cadetblue3"
## [46] "cadetblue4" "chartreuse" "chartreuse1"
## [49] "chartreuse2" "chartreuse3" "chartreuse4"
## [52] "chocolate" "chocolate1" "chocolate2"
## [55] "chocolate3" "chocolate4" "coral"
## [58] "coral1" "coral2" "coral3"
## [61] "coral4" "cornflowerblue" "cornsilk"
## [64] "cornsilk1" "cornsilk2" "cornsilk3"
## [67] "cornsilk4" "cyan" "cyan1"
## [70] "cyan2" "cyan3" "cyan4"
## [73] "darkblue" "darkcyan" "darkgoldenrod"
## [76] "darkgoldenrod1" "darkgoldenrod2" "darkgoldenrod3"
## [79] "darkgoldenrod4" "darkgray" "darkgreen"
## [82] "darkgrey" "darkkhaki" "darkmagenta"
## [85] "darkolivegreen" "darkolivegreen1" "darkolivegreen2"
## [88] "darkolivegreen3" "darkolivegreen4" "darkorange"
## [91] "darkorange1" "darkorange2" "darkorange3"
## [94] "darkorange4" "darkorchid" "darkorchid1"
## [97] "darkorchid2" "darkorchid3" "darkorchid4"
## [100] "darkred" "darksalmon" "darkseagreen"
## [103] "darkseagreen1" "darkseagreen2" "darkseagreen3"
## [106] "darkseagreen4" "darkslateblue" "darkslategray"
## [109] "darkslategray1" "darkslategray2" "darkslategray3"
## [112] "darkslategray4" "darkslategrey" "darkturquoise"
## [115] "darkviolet" "deeppink" "deeppink1"
## [118] "deeppink2" "deeppink3" "deeppink4"
## [121] "deepskyblue" "deepskyblue1" "deepskyblue2"
## [124] "deepskyblue3" "deepskyblue4" "dimgray"
## [127] "dimgrey" "dodgerblue" "dodgerblue1"
## [130] "dodgerblue2" "dodgerblue3" "dodgerblue4"
## [133] "firebrick" "firebrick1" "firebrick2"
## [136] "firebrick3" "firebrick4" "floralwhite"
## [139] "forestgreen" "gainsboro" "ghostwhite"
## [142] "gold" "gold1" "gold2"
## [145] "gold3" "gold4" "goldenrod"
## [148] "goldenrod1" "goldenrod2" "goldenrod3"
## [151] "goldenrod4" "gray" "gray0"
## [154] "gray1" "gray2" "gray3"
## [157] "gray4" "gray5" "gray6"
## [160] "gray7" "gray8" "gray9"
## [163] "gray10" "gray11" "gray12"
## [166] "gray13" "gray14" "gray15"
## [169] "gray16" "gray17" "gray18"
## [172] "gray19" "gray20" "gray21"
## [175] "gray22" "gray23" "gray24"
## [178] "gray25" "gray26" "gray27"
## [181] "gray28" "gray29" "gray30"
## [184] "gray31" "gray32" "gray33"
## [187] "gray34" "gray35" "gray36"
## [190] "gray37" "gray38" "gray39"
## [193] "gray40" "gray41" "gray42"
## [196] "gray43" "gray44" "gray45"
## [199] "gray46" "gray47" "gray48"
## [202] "gray49" "gray50" "gray51"
## [205] "gray52" "gray53" "gray54"
## [208] "gray55" "gray56" "gray57"
## [211] "gray58" "gray59" "gray60"
## [214] "gray61" "gray62" "gray63"
## [217] "gray64" "gray65" "gray66"
## [220] "gray67" "gray68" "gray69"
## [223] "gray70" "gray71" "gray72"
## [226] "gray73" "gray74" "gray75"
## [229] "gray76" "gray77" "gray78"
## [232] "gray79" "gray80" "gray81"
## [235] "gray82" "gray83" "gray84"
## [238] "gray85" "gray86" "gray87"
## [241] "gray88" "gray89" "gray90"
## [244] "gray91" "gray92" "gray93"
## [247] "gray94" "gray95" "gray96"
## [250] "gray97" "gray98" "gray99"
## [253] "gray100" "green" "green1"
## [256] "green2" "green3" "green4"
## [259] "greenyellow" "grey" "grey0"
## [262] "grey1" "grey2" "grey3"
## [265] "grey4" "grey5" "grey6"
## [268] "grey7" "grey8" "grey9"
## [271] "grey10" "grey11" "grey12"
## [274] "grey13" "grey14" "grey15"
## [277] "grey16" "grey17" "grey18"
## [280] "grey19" "grey20" "grey21"
## [283] "grey22" "grey23" "grey24"
## [286] "grey25" "grey26" "grey27"
## [289] "grey28" "grey29" "grey30"
## [292] "grey31" "grey32" "grey33"
## [295] "grey34" "grey35" "grey36"
## [298] "grey37" "grey38" "grey39"
## [301] "grey40" "grey41" "grey42"
## [304] "grey43" "grey44" "grey45"
## [307] "grey46" "grey47" "grey48"
## [310] "grey49" "grey50" "grey51"
## [313] "grey52" "grey53" "grey54"
## [316] "grey55" "grey56" "grey57"
## [319] "grey58" "grey59" "grey60"
## [322] "grey61" "grey62" "grey63"
## [325] "grey64" "grey65" "grey66"
## [328] "grey67" "grey68" "grey69"
## [331] "grey70" "grey71" "grey72"
## [334] "grey73" "grey74" "grey75"
## [337] "grey76" "grey77" "grey78"
## [340] "grey79" "grey80" "grey81"
## [343] "grey82" "grey83" "grey84"
## [346] "grey85" "grey86" "grey87"
## [349] "grey88" "grey89" "grey90"
## [352] "grey91" "grey92" "grey93"
## [355] "grey94" "grey95" "grey96"
## [358] "grey97" "grey98" "grey99"
## [361] "grey100" "honeydew" "honeydew1"
## [364] "honeydew2" "honeydew3" "honeydew4"
## [367] "hotpink" "hotpink1" "hotpink2"
## [370] "hotpink3" "hotpink4" "indianred"
## [373] "indianred1" "indianred2" "indianred3"
## [376] "indianred4" "ivory" "ivory1"
## [379] "ivory2" "ivory3" "ivory4"
## [382] "khaki" "khaki1" "khaki2"
## [385] "khaki3" "khaki4" "lavender"
## [388] "lavenderblush" "lavenderblush1" "lavenderblush2"
## [391] "lavenderblush3" "lavenderblush4" "lawngreen"
## [394] "lemonchiffon" "lemonchiffon1" "lemonchiffon2"
## [397] "lemonchiffon3" "lemonchiffon4" "lightblue"
## [400] "lightblue1" "lightblue2" "lightblue3"
## [403] "lightblue4" "lightcoral" "lightcyan"
## [406] "lightcyan1" "lightcyan2" "lightcyan3"
## [409] "lightcyan4" "lightgoldenrod" "lightgoldenrod1"
## [412] "lightgoldenrod2" "lightgoldenrod3" "lightgoldenrod4"
## [415] "lightgoldenrodyellow" "lightgray" "lightgreen"
## [418] "lightgrey" "lightpink" "lightpink1"
## [421] "lightpink2" "lightpink3" "lightpink4"
## [424] "lightsalmon" "lightsalmon1" "lightsalmon2"
## [427] "lightsalmon3" "lightsalmon4" "lightseagreen"
## [430] "lightskyblue" "lightskyblue1" "lightskyblue2"
## [433] "lightskyblue3" "lightskyblue4" "lightslateblue"
## [436] "lightslategray" "lightslategrey" "lightsteelblue"
## [439] "lightsteelblue1" "lightsteelblue2" "lightsteelblue3"
## [442] "lightsteelblue4" "lightyellow" "lightyellow1"
## [445] "lightyellow2" "lightyellow3" "lightyellow4"
## [448] "limegreen" "linen" "magenta"
## [451] "magenta1" "magenta2" "magenta3"
## [454] "magenta4" "maroon" "maroon1"
## [457] "maroon2" "maroon3" "maroon4"
## [460] "mediumaquamarine" "mediumblue" "mediumorchid"
## [463] "mediumorchid1" "mediumorchid2" "mediumorchid3"
## [466] "mediumorchid4" "mediumpurple" "mediumpurple1"
## [469] "mediumpurple2" "mediumpurple3" "mediumpurple4"
## [472] "mediumseagreen" "mediumslateblue" "mediumspringgreen"
## [475] "mediumturquoise" "mediumvioletred" "midnightblue"
## [478] "mintcream" "mistyrose" "mistyrose1"
## [481] "mistyrose2" "mistyrose3" "mistyrose4"
## [484] "moccasin" "navajowhite" "navajowhite1"
## [487] "navajowhite2" "navajowhite3" "navajowhite4"
## [490] "navy" "navyblue" "oldlace"
## [493] "olivedrab" "olivedrab1" "olivedrab2"
## [496] "olivedrab3" "olivedrab4" "orange"
## [499] "orange1" "orange2" "orange3"
## [502] "orange4" "orangered" "orangered1"
## [505] "orangered2" "orangered3" "orangered4"
## [508] "orchid" "orchid1" "orchid2"
## [511] "orchid3" "orchid4" "palegoldenrod"
## [514] "palegreen" "palegreen1" "palegreen2"
## [517] "palegreen3" "palegreen4" "paleturquoise"
## [520] "paleturquoise1" "paleturquoise2" "paleturquoise3"
## [523] "paleturquoise4" "palevioletred" "palevioletred1"
## [526] "palevioletred2" "palevioletred3" "palevioletred4"
## [529] "papayawhip" "peachpuff" "peachpuff1"
## [532] "peachpuff2" "peachpuff3" "peachpuff4"
## [535] "peru" "pink" "pink1"
## [538] "pink2" "pink3" "pink4"
## [541] "plum" "plum1" "plum2"
## [544] "plum3" "plum4" "powderblue"
## [547] "purple" "purple1" "purple2"
## [550] "purple3" "purple4" "red"
## [553] "red1" "red2" "red3"
## [556] "red4" "rosybrown" "rosybrown1"
## [559] "rosybrown2" "rosybrown3" "rosybrown4"
## [562] "royalblue" "royalblue1" "royalblue2"
## [565] "royalblue3" "royalblue4" "saddlebrown"
## [568] "salmon" "salmon1" "salmon2"
## [571] "salmon3" "salmon4" "sandybrown"
## [574] "seagreen" "seagreen1" "seagreen2"
## [577] "seagreen3" "seagreen4" "seashell"
## [580] "seashell1" "seashell2" "seashell3"
## [583] "seashell4" "sienna" "sienna1"
## [586] "sienna2" "sienna3" "sienna4"
## [589] "skyblue" "skyblue1" "skyblue2"
## [592] "skyblue3" "skyblue4" "slateblue"
## [595] "slateblue1" "slateblue2" "slateblue3"
## [598] "slateblue4" "slategray" "slategray1"
## [601] "slategray2" "slategray3" "slategray4"
## [604] "slategrey" "snow" "snow1"
## [607] "snow2" "snow3" "snow4"
## [610] "springgreen" "springgreen1" "springgreen2"
## [613] "springgreen3" "springgreen4" "steelblue"
## [616] "steelblue1" "steelblue2" "steelblue3"
## [619] "steelblue4" "tan" "tan1"
## [622] "tan2" "tan3" "tan4"
## [625] "thistle" "thistle1" "thistle2"
## [628] "thistle3" "thistle4" "tomato"
## [631] "tomato1" "tomato2" "tomato3"
## [634] "tomato4" "turquoise" "turquoise1"
## [637] "turquoise2" "turquoise3" "turquoise4"
## [640] "violet" "violetred" "violetred1"
## [643] "violetred2" "violetred3" "violetred4"
## [646] "wheat" "wheat1" "wheat2"
## [649] "wheat3" "wheat4" "whitesmoke"
## [652] "yellow" "yellow1" "yellow2"
## [655] "yellow3" "yellow4" "yellowgreen"
#####################################
# fonctions #
#####################################
ma_fonction <- function(x, y, z=0){
resultat <- x + y + z
return(resultat)
}
ma_fonction(x=100, y=10)
## [1] 110
ma_fonction(100, 10, 1000)
## [1] 1110
ma_fonction(z=10000, x=10, y=100)
## [1] 10110
#####################################
# condition #
#####################################
# quelques opérateurs
2 < 3
## [1] TRUE
2 >= 2
## [1] TRUE
2 != 3
## [1] TRUE
4 == 4
## [1] TRUE
2 == 3 | 3 == 3
## [1] TRUE
2 == 3 & 3 == 3
## [1] FALSE
a <- 1
if (a == 1){
print("a est bien égal à 1")
} else{
print("a n'est pas égale à 1")
}
## [1] "a est bien égal à 1"
# attention: une seule chose doit être testée
v <- c(1, 3, 0)
v == 3
## [1] FALSE TRUE FALSE
if (v == 3){
print("v est égal à 3")
} else{
print("v n'est pas égal à 3")
}
## Warning in if (v == 3) {: the condition has length > 1 and only the first
## element will be used
## [1] "v n'est pas égal à 3"
for (i in 1:6){
phrase <- paste("Voici le nombre", i)
print(phrase)
}
## [1] "Voici le nombre 1"
## [1] "Voici le nombre 2"
## [1] "Voici le nombre 3"
## [1] "Voici le nombre 4"
## [1] "Voici le nombre 5"
## [1] "Voici le nombre 6"
prenoms <- c("pierre", "paul", "jacques", "louis")
for (i in 1:length(prenoms)){
phrase <- paste("il ou elle s'appelle", prenoms[i])
print(phrase)
}
## [1] "il ou elle s'appelle pierre"
## [1] "il ou elle s'appelle paul"
## [1] "il ou elle s'appelle jacques"
## [1] "il ou elle s'appelle louis"
for (p in prenoms){
phrase <- paste("il ou elle s'appelle", p)
print(phrase)
}
## [1] "il ou elle s'appelle pierre"
## [1] "il ou elle s'appelle paul"
## [1] "il ou elle s'appelle jacques"
## [1] "il ou elle s'appelle louis"
# tant que
a <- 1
while (a < 4){
print(paste("a est égal à", a))
a <- a + 1
}
## [1] "a est égal à 1"
## [1] "a est égal à 2"
## [1] "a est égal à 3"
# chargement d'un package déjà installé
library(survival)
# rend disponible des fonctions spécifiques aux modèles de survie, par exemple:
?coxph
# Installation d'un package disponible sur le CRAN
install.packages("packHV")
library(packHV)
?desc
Note: la première installation d’un package BioConductor peut prendre du temps car il faut installer une série de packages de base.
# installation d'un package disponible sur Bioconductor
source("https://bioconductor.org/biocLite.R")
biocLite("rfPred")
# répondre "n" si R propose d'updater des packages
library(rfPred)
?rfPred_scores
# modèle linéaire simple
fit <- lm(formula=poids ~ taille, data=d)
fit
##
## Call:
## lm(formula = poids ~ taille, data = d)
##
## Coefficients:
## (Intercept) taille
## -75.7931 0.8276
summary(fit)
##
## Call:
## lm(formula = poids ~ taille, data = d)
##
## Residuals:
## 1 2 3 4
## -2.759 -3.241 2.897 3.103
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -75.7931 131.4434 -0.577 0.622
## taille 0.8276 0.7893 1.048 0.404
##
## Residual standard error: 4.251 on 2 degrees of freedom
## Multiple R-squared: 0.3547, Adjusted R-squared: 0.03202
## F-statistic: 1.099 on 1 and 2 DF, p-value: 0.4044
# interprétation graphique
plot(formula=poids ~ taille, data=d, pch=16, col="red",
main="Poids vs taille de 4 individus", xlab="Taille (cm)", ylab="Poids (kg)")
abline(a=-75.7931, b=0.8276, lty=2, lwd=3, col="grey")