c("deux", 1, TRUE)
? de c(0, FALSE)
? de c(0, "FALSE")
?R
:
\[\begin{bmatrix}39 & 66 & 13\\66 & 168 & 28\\13 & 28 & 5\end{bmatrix}\]data.frame()
.read.table()
.read_table()
.scan()
.Soient les observations x <- c(2, 5, 6, 3, 2)
.
x
par 10 ;min()
et max()
) : \[x_i = \frac{x_i - min(x)}{max(x)-min(x)};\]x
pour obtenir leur proportions (utiliser la fonction sum()
) ;Extraire le troisième élément du vecteur x <-c(3, 5, 6, 9)
;
Extraire les éléments supérieurs à 5 ;
Extraire les éléments qui ne sont pas dans l’intervalle \([1,3]\) ;
Déterminer le maximum du vecteur x
et donner sa position ;
Remplacer ce maximum par le minimum ;
Remplacer par la valeur NA
les éléments négatifs de la matrice suivante :
\[\begin{bmatrix}1 & -1 & 5 \\ 5 & 7 & -9 \end{bmatrix};\]
Extraire la deuxième colonne de la matrice obtenue à l’issue de la question 6 ;
Extraire le 3e élément de la liste suivante :
L <- list(rnorm(10), LETTERS[1:26], month.abb)
;
Extraire tous les éléments de la liste L
sauf le second.
Extraire le troisième élément de la liste L
, en utilisant le nom de l’élément.
L <- list(nombre = rnorm(10), lettre = LETTERS[1:26], mois = month.abb)
;
Toujours en accédant par le nom, ajouter la valeur 10
aux valeurs du premier élément de L
. Le résultat doit altérer L
;
Afficher les valeurs de la variable y
du tibble tb
:
tb <- tibble(x = 1:10, y = letters[1:10], z = rev(letters[1:10]))
;
Afficher uniquement les colonnes x
et z
du tibble tb
.
joueur_
et se terminant par un entier i
allant de 1 à 10
;Criquette Rockwell
et Brett Montgomery
, séparées par un retour à la ligne. Afficher le résultat dans la console avec la fonction cat()
;J'aime les pommes - "Ryuk"
, et stocker le résultat dans l’objet light
;light
) en majuscules ;light
en faisant appel à la fonction get()
.c("LON-1.6794", "LAT48.1147")
les valeurs numériques de longitue et latitude ;LON-1.6794
, remplacer LON
par LONG
;c("Finistere:I. d'Ouessant", "Finistere:I. de Batz", "Gard")
qui contiennent la sous-chaîne finistere
, en ne tenant pas compte de la casse ;-
) par une espace dans les éléments du vecteur c("02-23-23-35-35", "02-23-23-35-45")
;c("02-23-23-35-35", "02/23/23/35/45")
en fonction du tiret ou de la barre oblique.Avec la fonction appropriée du package {lubridate
}, créer un objet contenant la date du jour (sans les heures, minutes et secondes) ;
Idem avec l’heure du jour et les minutes (mais pas les secondes) ;
Convertir la chaîne de caractères x <- "17/05/2020"
en objet de type Date
;
Stocker sous forme de POSIXct
la date initialement donnée dans la chaîne de caractères suivate : "Thu Sep 18 23:40:54 +0000 2020"
;
À partir de la date obtenue en question précédente, obtenir l’heure équivalente à New York City ;
Calculer le nombre de jours séparant votre date de naissance et aujourd’hui ;
Créer une séquence de dates allant de “1975-01-01” à “2021-01-01”, par pas de 6 mois.
À partir de dd
, trouver la date une semaine auparavant (en termes de durées, et en termes d’époques).
<- "2012-03-02 23:40:54 +0000 2020" dd
Soient deux tableaux de données X
et Y
:
<- tibble(mois = month.name[c(1,6,1,6)], annee = c(2014, 2014, 2015, 2015),
(X val_1 = 1:4, val_2 = 5:8))
## # A tibble: 4 × 4
## mois annee val_1 val_2
## <chr> <dbl> <int> <int>
## 1 January 2014 1 5
## 2 June 2014 2 6
## 3 January 2015 3 7
## 4 June 2015 4 8
<- tibble(mois = rev(month.name[c(1,6,1,6)]), annee = c(2014, 2014, 2015, 2015),
(Y val_3 = 9:12, val_2 = 13:16))
## # A tibble: 4 × 4
## mois annee val_3 val_2
## <chr> <dbl> <int> <int>
## 1 June 2014 9 13
## 2 January 2014 10 14
## 3 June 2015 11 15
## 4 January 2015 12 16
Z
qui contient X
et Y
côte-à-côte ;rbind(X,Y)
;X
et Y
par année et par mois ;X
les valeurs de la colonne val_5
du tibble Z
, en effectuant l’appariement sur la colonne des années :<- tibble(year = c(2013, 2014), val_5 = c("A", "B"))) (Z
## # A tibble: 2 × 2
## year val_5
## <dbl> <chr>
## 1 2013 A
## 2 2014 B
chomage
, calculer la moyenne du nombre de chômeurs par région et par année ;Soit le tableau de données suivant :
<- tibble(region = rep(c(rep("Bretage",4), rep("Corse", 2)), 2),
tb dep = rep(c("Cotes-d'Armor", "Finistere",
"Ille-et-Vilaine", "Morbihan",
"Corse-du-Sud", "Haute-Corse"), 2),
annee = rep(2012:2013, each = 6),
ensoleillement = c(1586, 1545, 1762, 1792, 2933, 2735,
1639, 1661, 1729, 1770, 2715, 2606),
precipitations = c(733, 1311, 788, 920, 876, 676,
679, 1166, 736, 788, 871, 729))
ensoleillement_c
et precipitations_c
dans le tibble tb
, en utilisant la fonction mutate()
. Ces deux variables doivent représenter l’écart à la moyenne de la variable ensoleillement
et precipitations
respectivement ;tb
, créer un tibble en long, où chaque ligne correspond à la durée d’ensoleillement ou les précipitations par région, département et année. Chaque ligne doit indiquer si la valeur concerne l’ensoleillement ou les précipitations.Créer une fonction qui, pour deux arguments x
et y
retourne le résultat suivant :
\[\frac{xy}{x^2 + y^2}.\]
Tester cette fonction pour les valeurs \((x=0, y=0)\), puis \((x=1, y=2)\).
Soient deux points \(x\) et \(y\), de coordonnées \((x_1, x_2)\) et \((y_1, y_2)\), respectivement.
Créer une fonction à deux arguments, x
et y
, qui retourne la distance euclidienne entre x
et y
, c’est-à-dire qui calcule :
\[d(x,y) = \sqrt{(x_1-y_1)^2 + (x_2-y_2)^2}\] Tester cette fonction dans les 2 situations suivantes :
x=c(0,0)
et y=c(1,1)
x=c(1,1)
et y=c(1,1)
.Créer une fonction, qui étant donné un quantile \(x\), une espérance \(\mu\) et un écart-type \(\sigma\), retourne la densité de la loi normale. Comparer avec la fonction dnorm()
.
Reprendre la fonction de la question 1, et donner les valeurs par défaut 0 et 1 pour l’espérance et l’écart-type respectivement.
Rappel : la fonction de densité d’une loi normale est donnée par :
\[\varphi(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}.\]
Considérons un phénomène croissant que l’on modélise à l’aide d’un modèle logistique. La quantité que l’on modélise, \(C\) dépend du temps \(t\) et de trois paramètres :
La fonction est la suivante :
\[ C(t) = \frac{K}{1+\exp\left(-r (t - \tau)\right)}\]
Créer une fonction en R
qui retourne, en fonction du temps t
et de valeurs pour les paramètres K
, r
et t
, la valeur C(t)
.
Pour tester la fonction, utiliser par exemple les valeurs suivantes : K = 155074
, tau = 76.847
, r=0.094
pour une valeur de t=10
.
Créer une fonction nommée somme_n_entiers
qui retourne la somme des \(n\) premiers entiers. Son seul argument sera n
;
2.Utiliser la fonction somme_n_entiers()
pour calculer la somme des 100 premiers entiers ;
Terminer la fonction par l’assignation du résultat dans un objet nommé res
, puis évaluer l’expression suivante : somme_n_entiers(100)
. Que peut-on constater ?
Charger les données diamonds
du package {ggplot2
} dans la session R
à l’aide de l’expression suivante : data(diamonds, package = "ggplot2")
Créer une fonction que l’on appellera prix_diamant_coupe()
, qui, quand on lui fournit la valeur de la coupe du diamant sous forme de caractères (Fair
, Good
, Very Good
, Premium
, ou Ideal
), filtre le tableau de données diamonds
pour ne conserver que les observations pour lesquelles la coupe du diamant correspond à celle indiquée en argument, et retourne le prix moyen des observations de la base ainsi filtrée ;
Reprendre le code de la fonction précédente, et le modifier pour retourner à présent une liste de deux éléments : (i) la moyenne des prix et (ii) l’écart-type ;
Créer la fonction resume_diamant_coupe_couleur()
, qui pour une coupe et une couleur de diamant données, retourne une liste de deux éléments : (i) la moyenne des prix et (ii) l’écart-type pour les diamants possédant cette coupe et cette couleur (la couleur du diamant est une lettre allant de J
pour les pires, à D
pour les meilleurs). Tester la fonction pour la coupe Fair
et la couleur D
;
Reprendre la fonction précédente, et lui attribuer la valeur D
(en chaîne de caractères) comme argument effectif pour la couleur. Tester alors l’appel à la fonction en précisant :
Fair
et la couleur D
,Fair
, mais pas d’argument pour la couleur,Fair
et la couleur E
,E
;Supposons que les adresses e-mails des étudiant•e•s d’Aix-Marseille Université sont constituées de la manière suivante : le prénom et le nom de famille séparés par un point, le symbole arobase et le enfin le nom de domaine. Supposons de plus que les étudiant•e•s ont un seul prénom, et aucune particule au nom de famille. La syntaxe des adresses e-mail est donc comme suit : nom.prenom@etu.univ-amu.fr
.
emails <- c("marie.petit@etu.univ-amu.fr", "jean.dupont@etu.univ-amu.fr", "isabelle.martinez@etu.univ-amu.fr", "pierre.moreau@etu.univ-amu.fr")
Créer une fonction, qui à partir d’une seule adresse e-mail d’un•e étudiant•e, retourne un tibble contenant trois variables : le prénom, le nom et l’adresse e-mail de cet•te étudiant•e.
Considérons le vecteur suivant :
<-c(2,1,4,5,2,1,6) x
À partir de combien d’éléments de x
la somme cumulée devient-elle supérieure ou égale à 10 ? Pour répondre à cette question, utilisez une boucle while
:
x
Note : penser à utiliser la fonction sample()
.
for
pour calculer, sur 50 tirages de “pile” ou “face” avec une pièce de monnaie combien de “pile” sont obtenus.Note : penser à utiliser la fonction sample()
pour effectuer le tirage.
TRUE
si un nombre x
est divisible par une autre nombre diviseur
, et FALSE
sinon.Neuf (9) fichiers CSV sont présents dans le dossier situé à l’adresse suivante : egallic.fr/www/Enseignement/R/Exercices/Loops.
La structure de chacun de ces fichiers CSV est identique d’un fichier à l’autre :
x
, y
et row_number
)Le nom des fihciers suit la syntaxe suivante : loop_file_xxx.csv
, où xxx
vaut 001
, 002
, …, 009
.
L’objectif est de charger ces 9 fichiers à l’aide d’une boucle et d’empiler leur contenu dans un seul tableau de données.
df_l
, de longueur 9, à l’aide de la fonction vector()
.i
contenant la valeur 1
.str_pad()
, créez la chaîne de caractères i_pad
formattant la valeur de i
de manière à ajouter des “0” devant la valeur de i
; i_pad
doit avoir une longueur de 3 caractères. Exemple : Si i
vaut 1, alors i_pad
doit valoir 001
.i_pad
(concaténation).df_l
.df_l
.À partir du jeu de données diamonds
:
diamonds_s
, i.e., un échantillon de diamonds
de taille \(n = 1000\)price
) en fonction de la masse (carat
), afficher les points en rouge ;cut
) ;carat
), avec une fenêtre de 0.05 ;carat
) pour chaque coupe (cut
).carat
dans le data.frame
diamonds
) ;carat
) en fonction du prix associé (price
) ;cut
) ;"Qualité de la coupe"
;À partir du graphique suivant :
<- ggplot() + geom_point(data = diamonds[sample(1:nrow(diamonds), 1000),],
p aes(x = carat, y = price, colour = cut))
À partir du graphique suivant :
<- ggplot() + geom_point(data = diamonds[sample(1:nrow(diamonds), 1000),],
p aes(x = carat, y = price, colour = cut))
À partir du graphique suivant :
<- ggplot() + geom_point(data = diamonds[sample(1:nrow(diamonds), 1000),],
p aes(x = carat, y = price, colour = cut))