Tout d’abord, téléchargez le fichier
« productionFruits.csv » à partir du site web du cours
(« Contenu et activités > Semaine 2 ») et positionnez-le dans un
répertoire approprié sur votre ordinateur. Ce fichier contient des
données sur la production de fruits dans le monde.
Le fichier avait été téléchargé en janvier 2018 à partir du site web de la FAO (Organisation des Nations unies pour l’alimentation et l’agriculture), sur cette page : http://www.fao.org/faostat/fr/#data/QC
Les options sélectionnées étaient les suivantes :
Puisque le fichier « productionFruits.csv » n’est pas de
trop grosse taille, il est possible de le visualiser dans son entièreté.
Pour ce faire, commencez par faire une copie du fichier. Ensuite, ouvrez
cette copie dans l’éditeur de RStudio, ou dans un autre éditeur de
texte, pour voir son format.
Maintenant, lisez le fichier original en R de façon à importer les données qu’il contient et les stocker dans un data frame.
# chemin d'accès au fichier à adapter
fruits <- read.csv(
"C:/coursR/productionFruits.csv",
encoding = "UTF-8", # afin de lire correctement les accents
na.strings = "" # pour que les valeurs manquantes soit bien comprises
)
# Équivalent à :
fruits_copie <- read.table(
"C:/coursR/productionFruits.csv",
header = TRUE, sep = ",", quote = "\"", # valeurs par défaut de read.csv
encoding = "UTF-8", na.strings = ""
)
str(fruits)
## 'data.frame': 7758 obs. of 14 variables:
## $ Code.Domaine : chr "QC" "QC" "QC" "QC" ...
## $ Domaine : chr "Cultures" "Cultures" "Cultures" "Cultures" ...
## $ Code.zone : int 2 2 2 2 2 2 2 2 2 2 ...
## $ Zone : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ Code.Élément : int 5510 5510 5510 5510 5510 5510 5510 5510 5510 5510 ...
## $ Élément : chr "Production" "Production" "Production" "Production" ...
## $ Code.Produit : int 526 526 526 558 558 558 569 569 569 541 ...
## $ Produit : chr "Abricots" "Abricots" "Abricots" "Baies nda" ...
## $ Code.année : int 2014 2015 2016 2014 2015 2016 2014 2015 2016 2014 ...
## $ Année : int 2014 2015 2016 2014 2015 2016 2014 2015 2016 2014 ...
## $ Unité : chr "tonnes" "tonnes" "tonnes" "tonnes" ...
## $ Valeur : int 90000 87686 17894 23561 24357 23979 6100 4996 3143 46186 ...
## $ Symbole : chr "F" NA NA "Im" ...
## $ Description.du.Symbole: chr "Estimation FAO" "Donnée officielle" "Donnée officielle" "Données de la FAO basées sur une méthodologie d'imputation" ...
tail(fruits)
## Code.Domaine Domaine Code.zone Zone Code.Élément Élément Code.Produit
## 7753 QC Cultures 181 Zimbabwe 5510 Production 560
## 7754 QC Cultures 181 Zimbabwe 5510 Production 560
## 7755 QC Cultures 181 Zimbabwe 5510 Production 560
## 7756 QC Cultures 181 Zimbabwe 5510 Production 495
## 7757 QC Cultures 181 Zimbabwe 5510 Production 495
## 7758 QC Cultures 181 Zimbabwe 5510 Production 495
## Produit Code.année Année Unité Valeur Symbole
## 7753 Raisins 2014 2014 tonnes 3240 Im
## 7754 Raisins 2015 2015 tonnes 3321 Im
## 7755 Raisins 2016 2016 tonnes 3324 Im
## 7756 Tangerines, mandarines, clémentines, satsumas 2014 2014 tonnes 12864 Im
## 7757 Tangerines, mandarines, clémentines, satsumas 2015 2015 tonnes 13257 Im
## 7758 Tangerines, mandarines, clémentines, satsumas 2016 2016 tonnes 13458 Im
## Description.du.Symbole
## 7753 Données de la FAO basées sur une méthodologie d'imputation
## 7754 Données de la FAO basées sur une méthodologie d'imputation
## 7755 Données de la FAO basées sur une méthodologie d'imputation
## 7756 Données de la FAO basées sur une méthodologie d'imputation
## 7757 Données de la FAO basées sur une méthodologie d'imputation
## 7758 Données de la FAO basées sur une méthodologie d'imputationD’abord, téléchargez le fichier « EVENEMENT.JSON » à
partir du site web du cours (« Contenu et activités > Semaine 2 ») et
positionnez-le dans un répertoire approprié sur votre ordinateur. Ce
fichier contient des données sur des idées de sorties et des grands
évènements à Québec.
Le fichier a été téléchargé en janvier 2019 à partir du site web des données ouvertes de la province de Québec, sur cette page : https://www.donneesquebec.ca/recherche/fr/dataset/vque_5
Puisque le fichier « EVENEMENT.JSON » n’est pas de trop
grosse taille, il est possible de le visualiser dans son entièreté. Pour
ce faire, commencez par faire une copie du fichier. Ensuite, ouvrez
cette copie dans l’éditeur de RStudio pour voir son format.
Maintenant, lisez le fichier original en R de façon à importer les données qu’il contient et les stocker dans un data frame.
library(jsonlite)
# Le chemin d'accès au fichier est à adapter selon l'emplacement du fichier sur votre ordinateur.
evt <- fromJSON(txt = "C:/coursR/EVENEMENT.JSON")
# Ça fonctionne, mais un avertissement est émis :
# JSON string contains (illegal) UTF8 byte-order-mark!
# L'avertissement est causé par la présence de caractères illégaux dans le fichier. Idéalement,
# nous ne voulons pas modifier le fichier de données original. Nous sommes cependant dans une
# situation où un des seuls moyens d'éviter cet avertissement est d'éliminer des caractères
# dans le fichier original. Nous pourrions donc nous débarrasser des caractères illégaux en
# modifiant le fichier de données comme suit.
# Il faut d'abord ouvrir le fichier en RStudio.
# Un fichier peut être ouvert en RStudio par le menu « File > Open File... », ou encore via la
# sous-fenêtre « Files ». Si les accents sont mal affichés dans le fichier, c'est qu'il n'est
# probablement pas lu avec le bon encodage. Pour l'ouvrir avec le bon encodage, vous pouvez
# suivre les instructions dans la section « Résolution de problèmes > Les accents s'affichent
# incorrectement dans RStudio. » des notes sur l'installation de R et RStudio
# https://stt4230.rbind.io/introduction/installation_r_rstudio/#r%C3%A9solution-de-probl%C3%A8mes
# En RStudio, les caractères illégaux dans le fichier EVENEMENT.JSON apparaissent comme des
# points rouges (par exemple à la ligne 11). Nous allons les remplacer par des espaces.
# Il faut d'abord ouvrir le menu de recherche et remplacement. Nous pouvons ouvrir ce menu de
# plusieurs façons :
# - avec le raccourci clavier Ctrl+F,
# - en cliquant sur la loupe dans le haut de l'onglet du fichier,
# - par le menu Edit -> Find...
# Maintenant, il faut
# - sélectionner un point rouge dans le fichier,
# - le copier,
# - le coller dans la case "Find" du menu de recherche et remplacement
# (dans cette case le caractère apparaît comme un espace),
# - saisir un caractère espace dans la case "Replace" du menu de recherche et remplacement,
# - cliquer sur le dernier bouton "All".
# Lorsque j'ai réalisé ces étapes, 1085 remplacements ont été effectués
# (mon fichier était ouvert en RStudio avec l'encodage UTF-8).
# Une fois la modification terminée, il faut enregistrer le fichier. Il est sage de
# l'enregistrer sous un autre nom (par exemple EVENEMENT_MODIF.JSON), pour conserver une copie
# intacte du fichier original.
evt <- fromJSON(txt = "C:/coursR/EVENEMENT_MODIF.JSON")
str(evt)
## List of 1
## $ IDEES_SORTIE:List of 1
## ..$ IDEE_SORTIE:'data.frame': 601 obs. of 17 variables:
## .. ..$ CATEGORIE_EVENEMENT : chr [1:601] "Musique" "Spectacle" "Musique" "Spectacle" ...
## .. ..$ TITRE_EVENEMENT : chr [1:601] "Guitar Story" "Guitar Story" "Geneviève Leclerc : Avec le temps " "Geneviève Leclerc : Avec le temps " ...
## .. ..$ DEBUT_EVENEMENT : chr [1:601] "2019-01-19" "2019-01-19" "2019-02-08" "2019-02-08" ...
## .. ..$ FIN_EVENEMENT : chr [1:601] "2019-01-19" "2019-01-19" "2019-02-08" "2019-02-08" ...
## .. ..$ HORAIRE_EVENEMENT : chr [1:601] "20 h" "20 h" "20 h" "20 h" ...
## .. ..$ COUT_EVENEMENT : chr [1:601] "1" "1" "1" "1" ...
## .. ..$ DESCRIPTION_EVENEMENT : chr [1:601] "Ce spectacle haut en couleur est un hommage aux guitaristes des 100 dernières années, tous styles confondus, al"| __truncated__ "Ce spectacle haut en couleur est un hommage aux guitaristes des 100 dernières années, tous styles confondus, al"| __truncated__ "Avec ce spectacle, l'artiste retrace une histoire d’amour, une véritable histoire de vie, mêlant joie, tristess"| __truncated__ "Avec ce spectacle, l'artiste retrace une histoire d’amour, une véritable histoire de vie, mêlant joie, tristess"| __truncated__ ...
## .. ..$ RENSEIGNEMENT_EVENEMENT : chr [1:601] "5" "5" "5" "5" ...
## .. ..$ TEL1_EVENEMENT : chr [1:601] "418-641-6032-" "418-641-6032-" "418-641-6032-" "418-641-6032-" ...
## .. ..$ TEL2_EVENEMENT : chr [1:601] NA NA NA NA ...
## .. ..$ COURRIEL_EVENEMENT : chr [1:601] NA NA NA NA ...
## .. ..$ URL_EVENEMENT : chr [1:601] "http://centredartlachapelle.com" "http://centredartlachapelle.com" "http://centredartlachapelle.com" "http://centredartlachapelle.com" ...
## .. ..$ NOMLIEU_EVENEMENT : chr [1:601] "Centre d'art La Chapelle" "Centre d'art La Chapelle" "Centre d'art La Chapelle" "Centre d'art La Chapelle" ...
## .. ..$ COMPLEMENT_LIEU_EVENEMENT: chr [1:601] NA NA NA NA ...
## .. ..$ ADRESSE_EVENEMENT : chr [1:601] "620, avenue Plante" "620, avenue Plante" "620, avenue Plante" "620, avenue Plante" ...
## .. ..$ TEL_LIEU : chr [1:601] "418-686-5032-" "418-686-5032-" "418-686-5032-" "418-686-5032-" ...
## .. ..$ NOM_ARRONDISSEMENT : chr [1:601] "Les Rivières" "Les Rivières" "Les Rivières" "Les Rivières" ...
# Pour simplifier l'objet, qui est une liste à un seul élément,
# contenant une autre liste à un seul élément,
# contenant un data frame,
# nous pouvons procéder comme suit :
evt11.1 <- evt[[1]][[1]]
# Ceci fonctionne aussi.
evt11.2 <- as.data.frame(evt)
# Nous nous sommes débarrassé de la « double enveloppe » de listes.
str(evt11.1)
## 'data.frame': 601 obs. of 17 variables:
## $ CATEGORIE_EVENEMENT : chr "Musique" "Spectacle" "Musique" "Spectacle" ...
## etc.D’abord, téléchargez le fichier
« listehorairebiblio.xls » à partir du site web du cours
(« Contenu et activités > Semaine 2 ») et positionnez-le dans un
répertoire approprié sur votre ordinateur. Ce fichier contient les
coordonnées et les heures d’ouverture des bibliothèques publiques de la
ville de Québec.
Le fichier a été téléchargé en janvier 2019 à partir du site web des données ouvertes de la province de Québec, sur cette page : https://www.donneesquebec.ca/recherche/fr/dataset/vque_6
Puisque le fichier « listehorairebiblio.xls » n’est pas
de trop grosse taille, il est possible de le visualiser dans son
entièreté. Pour ce faire, commencez par faire une copie du fichier.
Ensuite, ouvrez cette copie en EXCEL pour voir son format. Si vous ne
possédez pas ce logiciel, sachez qu’il existe des logiciels gratuits
capable d’ouvrir des chiffriers EXCEL, tel que LibreOffice Calc.
Maintenant, lisez le fichier original en R de façon à importer les données qu’il contient et les stocker dans un data frame.
Importez en R les données de la page web suivante : https://fr.wikipedia.org/wiki/Liste_des_pays_et_territoires_par_superficie#Pays_par_leur_superficie_totale
Il faut lire les données directement dans la table HTML contenant les superficies des pays.
Vous devriez ultimement avoir en main un data frame (ou plutôt un tibble avec la nouvelle version de rvest).
library(rvest)
url <- "https://fr.wikipedia.org/wiki/Liste_des_pays_et_territoires_par_superficie#Pays_par_leur_superficie_totale"
doc <- read_html(url)
tables <- html_table(doc, fill = TRUE)
superficie <- tables[[1]]
str(superficie)
## tibble [236 x 5] (S3: tbl_df/tbl/data.frame)
## $ Rang : chr [1:236] "1" "2" "3 ou 4[Note 4]" "3 ou 4[Note 4]" ...
## $ Pays ou territoire : chr [1:236] "Russie" "Canada" "États-Unis" "Chine continentale" ...
## $ Superficie (km2) [Note 3]: chr [1:236] "17 125 191 km2" "9 984 670 km2" "9 629 091 km2" "9 600 000 km2[7]" ...
## $ % du total : chr [1:236] "11,5 %" "6,7 %" "6,4 %" "6,4 %" ...
## $ Notes : chr [1:236] "Superficie incluant la République de Crimée. Le premier pays du monde en superficie, situé à la fois en Asie et"| __truncated__ "Premier pays en superficie d'Amérique et de l'hémisphère ouest" "Inclut seulement les États américains et le District de Columbia (la capitale Washington). La surface indiquée "| __truncated__ "Premier pays en superficie complètement en Asie[Note 6].\nHong Kong et Macao sont des régions administratives s"| __truncated__ ...
head(superficie[, -5])
## # A tibble: 6 x 4
## Rang `Pays ou territoire` `Superficie (km2) [Note 3]` `% du total`
## <chr> <chr> <chr> <chr>
## 1 1 Russie 17 125 191 km2 11,5 %
## 2 2 Canada 9 984 670 km2 6,7 %
## 3 3 ou 4[Note 4] États-Unis 9 629 091 km2 6,4 %
## 4 3 ou 4[Note 4] Chine continentale 9 600 000 km2[7] 6,4 %
## 5 3 ou 4[Note 4] Hong Kong 1 104 km2 6,4 %
## 6 3 ou 4[Note 4] Macao 30 km2 6,4 % Exportez le jeu de données obtenu à la question 2 (évènements dans la ville de Québec) dans un fichier texte.
Enregistrez l’objet R obtenu à la question 2 dans un fichier externe,
sous un format propre à R. Ensuite, chargez en R l’objet en lui donnant
un nom différent de l’objet d’origine. Utilisez la fonction
identical pour tester si les deux objets sont
identiques.
saveRDS(evt11.1, file = "C:/coursR/evt.rds")
# Test : réimportons ce fichier et comparons-le au fichier d'origine
evt_import <- readRDS("C:/coursR/evt.rds")
# Les deux objets sont identiques.
identical(evt_import, evt11.1)
# Si on avait utilisé save au lieu de saveRDS
save(evt11.1, file = "C:/coursR/evt.rda")
# Pour réimporter un fichier .rda, il faut être vigilant. Ce fichier contient des objets R nommés.
# Charger ce fichier en R provoque l'ajout d'objets à notre environnement de travail. Cependant,
# si notre environnement de travail contient déjà des objets portant le(s) même(s) nom(s),
# ils sont écrasés, sans message d'avertissement.
load("C:/coursR/evt.rda")
# Il vaut mieux utiliser une commande load lorsque notre environnement de travail est vide.
rm(list = ls()) # pour vider notre environnement de travail
load("C:/coursR/evt.rda")Afin de pouvoir répondre aux questions suivantes, téléchargez le
fichier x.rda à partir du site web du cours (Contenu et
activités > Semaine 2). Ensuite, chargez en R le fichier
x.rda. Il contient 6 objets R, nommés x1 à
x6.
load("C:/coursR/x.rda")
De quel type est chacun des objets contenu dans le fichier
x.rda ?
# Objet x1 :
x1
## x
## 1 6
## 2 7
## 3 6
## 4 8
## 5 7
str(x1)
## 'data.frame': 5 obs. of 1 variable:
## $ x: num 6 7 6 8 7
is.data.frame(x1)
## [1] TRUE
is.list(x1)
## [1] TRUE
# Il s'agit d'un data frame.
#***************************************
# Objet x2 :
x2
## , , 1
##
## x
## 1 6
## 2 7
## 3 6
## 4 8
## 5 7
str(x2)
## num [1:5, 1, 1] 6 7 6 8 7
## - attr(*, "dimnames")=List of 3
## ..$ : chr [1:5] "1" "2" "3" "4" ...
## ..$ : chr "x"
## ..$ : NULL
is.array(x2)
## [1] TRUE
is.matrix(x2)
## [1] FALSE
# Il s'agit d'un array.
#***************************************
# Objet x3 :
x3
## $x
## [1] 6 7 6 8 7
str(x3)
## List of 1
## $ x: num [1:5] 6 7 6 8 7
is.list(x3)
## [1] TRUE
is.vector(x3)
## [1] TRUE
is.recursive(x3)
## [1] TRUE
is.data.frame(x3)
## [1] FALSE
# Il s'agit d'une liste.
#***************************************
# Objet x4 :
x4
## [1] 6 7 6 8 7
## Levels: 6 7 8
str(x4)
## Factor w/ 3 levels "6","7","8": 1 2 1 3 2
is.factor(x4)
## [1] TRUE
is.vector(x4)
## [1] FALSE
# Il s'agit d'un facteur.
#***************************************
# Objet x5 :
x5
## [1] 6 7 6 8 7
str(x5)
## num [1:5] 6 7 6 8 7
is.vector(x5)
## [1] TRUE
is.atomic(x5)
## [1] TRUE
# Il s'agit d'un vecteur.
#***************************************
# Objet x6 :
x6
## x
## 1 6
## 2 7
## 3 6
## 4 8
## 5 7
str(x6)
## num [1:5, 1] 6 7 6 8 7
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:5] "1" "2" "3" "4" ...
## ..$ : chr "x"
is.matrix(x6)
## [1] TRUE
# Il s'agit d'une matrice.Quelles commandes, parmi les suivantes, permettent d’extraire du data
frame x1 les éléments en positions 2, 4 et 5 dans la
première et unique colonne ?
# a)
x1[c(2, 4, 5)]
# b)
x1[c(2, 4, 5), ]
# c)
x1[[c(2, 4, 5)]]
# d)
x1[[1]][c(2, 4, 5)]
# e)
x1$x[-c(1, 3)]
# f)
x1$x[-c(1, 3), ]
# b), d) et e)
x1[c(2, 4, 5), ] # exploite les deux dimensions du data frame x1
x1[[1]][c(2, 4, 5)] # exploite le fait qu'un data frame est un cas particulier de liste
# et qu'un élément du data frame est une colonne
x1$x[-c(1, 3)] # exploite encore la nature récursive du data frame et le fait
# que ses éléments sont nommés
# a) et c) ne fonctionnent pas, car en fournissant un argument pour une seule dimension
# l'extraction d'éléments (ici = colonnes) est effectué et le data frame ne possède
# qu'une seule colonne
# f) ne fonctionne pas, car x1$x est un vecteur (une seule dimension) Quelles commandes, parmi les suivantes, permettent d’extraire de
l’array x2 les éléments en positions 2, 4 et 5 selon la
première dimension et en position 1 selon les autres dimensions ?
# a)
x2[c(2, 4, 5)]
# b)
x2[[c(2, 4, 5)]]
# c)
x2[c(2, 4, 5), ]
# d)
x2[, c(2, 4, 5), ]
# e)
x2[c(2, 4, 5), , ]
# f)
x2[c(2, 4, 5), 1, 1]
# a), e) et f)
x2[c(2, 4, 5)] # argument pour une seule dimension = extraction dans le vecteur des éléments
x2[c(2, 4, 5), , ] # fonctionne, car les deux dernières dimensions sont de taille 1
x2[c(2, 4, 5), 1, 1]
# b) ne fonctionne pas, car le crochet double sert à extraire un seul élément
# c) ne fonctionne pas, car il manque un argument pour une dimension
# d) ne fonctionne pas, car la deuxième dimension est de taille 1Quelles commandes, parmi les suivantes, permettent d’extraire du
premier et unique objet de la liste x3 les éléments en
positions 2, 4 et 5 ?
# a)
x3[c(2, 4, 5)]
# b)
x3[c(2, 4, 5), ]
# c)
x3[[c(2, 4, 5)]]
# d)
x3[[1]][c(2, 4, 5)]
# e)
x3$x[-c(1, 3)]
# f)
x3$x[-c(1, 3), ]
Quelles commandes, parmi les suivantes, permettent d’extraire du
facteur x4 les éléments en positions 2, 4 et 5 ?
# a)
x4[c(2, 4, 5)]
# b)
x4[c(2, 4, 5), ]
# c)
x4[[c(2, 4, 5)]]
# d)
x4[c(FALSE, TRUE, FALSE, TRUE, TRUE)]
# e)
x4[-c(1, 3)]
# f)
x4[c(2, 4:5)]
Quelles commandes, parmi les suivantes, permettent d’extraire du
vecteur x5 les éléments en positions 2, 4 et 5 ?
# a)
x5[c(2, 4, 5)]
# b)
x5[c(2, 4, 5), ]
# c)
x5[[c(2, 4, 5)]]
# d)
x5[c(FALSE, TRUE, FALSE, TRUE, TRUE)]
# e)
x5[-c(1, 3)]
# f)
x5[c(2, 4:5)]
Quelles commandes, parmi les suivantes, permettent d’extraire de la
matrice x6 les éléments dans la première et unique colonne
et sur les lignes 2, 4 et 5 ?
# a)
x6[c(2, 4, 5)]
# b)
x6[c(2, 4, 5), ]
# c)
x6[c(2, 4, 5), 1]
# d)
x6[c(2, 4, 5), 0]
# e)
x6[[c(2, 4, 5)]]
# f)
x6[[1]][c(2, 4, 5)]
# g)
x6$x[c(2, 4, 5)]
# a), b), c)
x6[c(2, 4, 5)] # argument pour une seule dimension = extraction dans le vecteur des éléments
x6[c(2, 4, 5), ] # fonctionne, car les deux deuxième dimension est de taille 1
x6[c(2, 4, 5), 1]
# d) ne fonctionne pas, car il n'a pas d'index 0 en R (contraitement à Python par exemple)
# e) ne fonctionne pas, car le crochet double sert à extraire un seul élément
# f) ne fonctionne pas, car le premier élément d'une matrice est la valeur en position (1,1)
# g) ne fonctionne pas, car l'opérateur $ est réservé aux objets récursifs alors qu'une
# matrice est un objet atomiqueQue permet de faire la fonction c (cochez toutes les
bonnes réponses) ?
# a) créer une matrice
# b) créer un vecteur
# c) concaténer des vecteurs
# d) concaténer des matrices
# e) concaténer des listes
# f) transformer une matrice en vecteur
Lesquelles des fonctions ou opérateurs R suivants peuvent retourner un vecteur ?
# a) paste
# b) cbind
# c) str
# d) :
# e) seq
# f) rep
Lesquelles des commandes suivantes permettent de créer le vecteur (13, 14, 15, 16, 17) ?
# a)
(13, 14, 15, 16, 17)
# b)
c(13, 14, 15, 16, 17)
# c)
vector(13, 14, 15, 16, 17)
# d)
seq(from = 13, to = 17)
# e)
13:17
# f)
c(13:17)
Lesquelles des commandes suivantes permettent de créer le vecteur numérique (2, 2, , 3, 3, 3) (la 3e valeur est manquante) ?
# a)
y1 <- c(2, 2, "NA", 3, 3, 3)
# b)
y2 <- c(2, 2, NA, 3, 3, 3)
# c)
y3 <- c(2, 2, NaN, 3, 3, 3)
# d)
y4 <- rep(2:3, each = 3); y4[3] <- "NA"
# e)
y5 <- rep(2:3, each = 3); y5[3] <- NA
# f)
y6 <- rep(2:3, each = 3); y6[3] <- NaN
Lesquelles des commandes suivantes permettent de créer une matrice à 2 lignes et 3 colonnes contenant uniquement des 1?
# a)
matrix(rep(1, 6), 2, 3)
# b)
matrix(rep(1, 6), 3, 2)
# c)
matrix(rep(1, 6), ncol = 3, nrow = 2)
# d)
matrix(rep(1, 3), 2, 3)
# e)
matrix(rep(1, 2), 2, 3)
# f)
matrix(1, 2, 3)
# toutes les solutions, sauf b)
matrix(rep(1, 6), 2, 3)
matrix(rep(1, 6), ncol = 3, nrow = 2)
# la règle de recyclage intervient dans les 3 solutions suivantes :
matrix(rep(1, 3), 2, 3)
matrix(rep(1, 2), 2, 3)
matrix(1, 2, 3)
# seule la solution b) ne fonctionne pas, car les valeurs données en entrée ne sont pas
# précédées d'affectations à des noms d'arguments, donc la deuxième valeur fournie est
# attribuée au deuxième argument, soit nrow, alors que nous voulons plutôt attribuer
# cette valeur (3) à ncol.Soit la matrice abc créée comme suit.
abc <- matrix(letters[1:9], nrow = 3, ncol = 3, byrow = TRUE)
Lesquelles des commandes suivantes permettent d’ajouter une ligne à cette matrice ?
# a)
c(abc, letters[10:12])
# b)
cbind(abc, letters[10:12])
# c)
rbind(abc, letters[10:12])
# d)
matrix(c(t(abc), letters[10:12]), nrow = 4, ncol = 3, byrow = TRUE)
# e)
abc[, 4] <- letters[10:12]
# f)
abc[4, ] <- letters[10:12]
# g)
abc[10:12] <- letters[10:12]
# c) et d)
rbind(abc, letters[10:12])
matrix(c(t(abc), letters[10:12]), nrow = 4, ncol = 3, byrow = TRUE)
# a) et g) ne fonctionnent pas, car le résultat est un vecteur au lieu d'une matrice
# b) ne fonctionne pas, car une colonne est ajoutée au lieu d'une ligne
# e) et f) ne fonctionnent pas, car l'indiçage avec des arguments pour plus d'une
# dimension n'accepte pas l'utilisation de positions supérieures à la taille
# de la dimension pour des matrices et des arraysSoit la matrice mat créée comme suit.
mat <- cbind(a = c(FALSE, TRUE), b = c(TRUE, NA))
Lesquelles des commandes suivantes permettent de convertir dans un format numérique les éléments de cette matrice tout en conservant le résultat sous forme de matrice ?
# a)
as.numeric(mat)
# b)
as.double(mat)
# c)
as.integer(mat)
# d)
mat[1, 1] <- 0
# e)
mat[1] <- 0
# f) (nous verrons la fonction apply au prochain cours)
apply(mat, MARGIN = 2, FUN = as.numeric)
Lesquels des bouts de code R suivants auraient pu servir à créer
l’objet x2 ?
# a)
x2_a <- array(
c(6, 7, 6, 8, 7),
dim = c(5, 1, 1),
dimnames = list(1:5, "x", NULL)
)
# b)
x2_b <- as.array(
c(6, 7, 6, 8, 7),
dim = c(5, 1, 1),
dimnames = list(1:5, "x", NULL)
)
# c)
x2_c <- c(6, 7, 6, 8, 7)
dim(x2_c) <- c(5, 1, 1)
dimnames(x2_c) <- list(1:5, "x", NULL)
# d)
x2_d <- as.array(
matrix(
c(6, 7, 6, 8, 7),
ncol = 1,
dimnames = list(1:5, "x")
)
)
# e)
x2_e <- matrix(
c(6, 7, 6, 8, 7),
ncol = 1,
dimnames = list(1:5, "x")
)
dim(x2_e) <- c(5, 1, 1)
# a)
x2_a <- array(
c(6, 7, 6, 8, 7),
dim = c(5, 1, 1),
dimnames = list(1:5, "x", NULL)
)
identical(x2_a, x2)
# c)
x2_c <- c(6, 7, 6, 8, 7)
dim(x2_c) <- c(5, 1, 1)
dimnames(x2_c) <- list(1:5, "x", NULL)
identical(x2_c, x2)
# b) ne fonctionne pas, car as.array ne tient pas compte des arguments dim et dimnames
# d) ne fonctionne pas, car le résultat possède 2 dimensions, et non 3
# e) ne fonctionne pas, car utiliser dim avec une assignation a pour effet de retirer
# les attributs names et dimnamesLesquels des éléments suivants sont des utilités des listes en R ?
# a) regrouper différents objets R
# b) contenir des valeurs de même type
# c) stocker les noms des dimensions d'un array
# d) retourner en sortie d'une fonction plus d'un objet R
# e) stocker les observations d'une variable catégorique
Soit la liste adresse créée comme suit.
adresse <- list(a = c("1045", "av. de la Médecine"), b = c("Université Laval"))
Lesquelles des commandes suivantes permettent d’ajouter un vecteur comme 3e élément à cette liste ?
# a)
c(adresse, c = c("Québec", "Qc", "Canada"))
# b)
c(adresse, c = list("Québec", "Qc", "Canada"))
# c)
c(adresse, c = list(c("Québec", "Qc", "Canada")))
# d)
list(adresse, c = c("Québec", "Qc", "Canada"))
# e)
adresse["c"] <- c("Québec", "Qc", "Canada")
# f)
adresse[["c"]] <- c("Québec", "Qc", "Canada")
# g)
adresse$c <- c("Québec", "Qc", "Canada")
# c), f) et g)
c(adresse_DMS, c = list(c("Québec", "Qc", "Canada")))
adresse_DMS[["c"]] <- c("Québec", "Qc", "Canada")
adresse_DMS$c <- c("Québec", "Qc", "Canada")
# a) et b) ne fonctionnent pas, car ils n'ajoutent pas un seul élément, ils brisent
# le vecteur à ajouter en vecteurs unitaires qui deviennent chacun des éléments
# distincts dans la liste retournée
# d) ne fonctionne pas, car le résultat est une liste de longueur 2 (le premier
# élément de la liste retournée est la liste adresse entière)
# e) ne fonctionne pas, car seulement le premier élément du vecteur à ajouter est ajoutéSoit la liste adresse_municipale créée comme suit.
adresse_municipale <- list("numero civique" = 1045, "rue" = "av. de la Médecine")
Lesquelles des commandes suivantes permettent d’extraire le premier élément de cette liste ?
L’objet retourné doit être un vecteur atomique de longueur 1.
# a)
adresse_municipale[1]
# b)
adresse_municipale[numero]
# c)
adresse_municipale[numero civique]
# d)
adresse_municipale["numero"]
# e)
adresse_municipale["numero civique"]
# f)
adresse_municipale[[1]]
# g)
adresse_municipale[[numero]]
# h)
adresse_municipale[[numero civique]]
# i)
adresse_municipale[["numero"]]
# j)
adresse_municipale[["numero", exact = FALSE]]
# k)
adresse_municipale[["numero civique"]]
# l)
adresse_municipale$"numero"
# m)
adresse_municipale$"numero civique"
# n)
adresse_municipale$numero
# o)
adresse_municipale$numero civique
# f), j), k), l), m) et n)
adresse[[1]]
adresse_municipale[["numero", exact = FALSE]] # identification à partir de noms partiels permise
adresse[["numero civique"]]
adresse$"numero" # l'opérateur $ fait de l'identification à partir de noms partiels
adresse$"numero civique"
adresse$numero # guillemets non requis autour d'un nom ne contenant pas d'espace(s) avec $
# a) et e) ne fonctionnent pas, car le résultat est une liste, pas un vecteur atomique de
# longeur 1
# b), c), g), h) ne fonctionnent pas, car l'identification par noms d'éléments avec les
# opérateurs [ et [[ requière que ces noms soient encadrés de guillemets
# d) ne fonctionne pas, car l'opérateur [ n'est pas capable de faire de l'identification
# à partir de noms partiels
# i) ne fonctionne pas, car l'opérateur [[ peut faire de l'identification à partir de
# noms partiels seulement si la valeur FALSE est fournie à son argument exact.
# o) ne fonctionne pas, car les noms comprenant un espace doivent toujours être encadrés
# de guillemets, même avec l'opérateur $Soit le data frame df créé comme suit.
df <- data.frame(
X = c(34, 56, NA, 30),
Y = c("Alain", "Marcel", "Roger", NA)
)
Lesquelles de commandes suivantes permettent d’ajouter une colonne à ce data frame ?
# a)
c(df, Z = c("fumeur", "non-fumeur", NA, "non-fumeur"))
# b)
cbind(df, Z = c("fumeur", "non-fumeur", NA, "non-fumeur"))
# c)
rbind(df, Z = c("fumeur", "non-fumeur", NA, "non-fumeur"))
# d)
data.frame(df, Z = c("fumeur", "non-fumeur", NA, "non-fumeur"))
# e)
df[, "Z"] <- c("fumeur", "non-fumeur", NA, "non-fumeur")
# f)
df["Z", ] <- c("fumeur", "non-fumeur", NA, "non-fumeur")
# g)
df[["Z"]] <- c("fumeur", "non-fumeur", NA, "non-fumeur")
# h)
df$Z <- c("fumeur", "non-fumeur", NA, "non-fumeur")
# b), d), e), g) et h)
cbind(df, Z = factor(c("fumeur", "non-fumeur", NA, "non-fumeur")))
data.frame(df, Z = factor(c("fumeur", "non-fumeur", NA, "non-fumeur")))
df[, "Z"] <- factor(c("fumeur", "non-fumeur", NA, "non-fumeur"))
df[["Z"]] <- factor(c("fumeur", "non-fumeur", NA, "non-fumeur"))
df$Z <- factor(c("fumeur", "non-fumeur", NA, "non-fumeur"))
# a) ne fonctionne pas, car le résultat est une liste
# c) et f) ne fonctionnent pas, car ils ajoutent une ligne, pas une colonneSoit le data frame df créé comme suit.
df <- data.frame(
X = c(34, 56, NA, 30),
Y = c("Alain", "Marcel", "Roger", NA)
)
Lesquelles des commandes suivantes permettent de renommer les colonnes de ce data frame ?
# a)
names(df) <- c("age", "nom")
# b)
colnames(df) <- c("age", "nom")
# c)
col.names(df) <- c("age", "nom")
# d)
dimnames(df) <- c("age", "nom")
# e)
dimnames(df) <- list(1:4, c("age", "nom"))
# f)
attr(df, "names") <- c("age", "nom")
# g)
attr(df, "colnames") <- c("age", "nom")
# a), b), e) et f)
names(df) <- c("age", "nom")
colnames(df) <- c("age", "nom")
dimnames(df) <- list(1:4, c("age", "nom"))
attr(df, "names") <- c("age", "nom")
# c) ne fonctionne pas, car la fonction col.names n'existe pas
# d) ne fonctionne pas, car la valeur fournie à dimnames doit être une liste
# g) ne fonctionne pas, car les noms des colonnes d'un data frame sont stockés
# dans un attribut nommé "names"", pas "colnames"Soit le data frame df créé comme suit.
df <- data.frame(
X = c(34, 56, NA, 30),
Y = c("Alain", "Marcel", "Roger", NA)
)
Lesquelles des commandes suivantes permettent de remplacer, dans ce data frame :
sans modifier les types des données ?
# a)
df[c(3, 4), c(1, 2)] <- c(44, "Paul")
# b)
df[3, 1] <- 44; df[4, 2] <- "Paul"
# c)
df[[1]][3] <- 44; df[[2]][4] <- "Paul"
# d)
df$X[3] <- 44; df$Y[4] <- "Paul"
# e)
df[3] <- 44; df[8] <- "Paul"
# b) , c) et d)
df[3, 1] <- 44; df[4, 2] <- "Paul"
df[[1]][3] <- 44; df[[2]][8] <- "Paul"
df$X[3] <- 44; df$Y[4] <- "Paul"
# a) ne fonctionne pas, car les positions ne sont pas correctement identifiées
# e) ne fonctionne pas, car [ extrait des éléments et les éléments d'un data frame sont ses colonnesSoit le facteur fc créé comme suit.
fc <- factor(c(9, 9, 3, 9))
Lesquelles des commandes suivantes permettent d’ajouter un élément à ce facteur en conservant intacts ses premiers éléments ?
# a)
c(fc, 3)
# b)
factor(fc, 3)
# c)
as.factor(c(fc, 3))
# d)
fc[5] <- 3
# e)
length(fc) <- 5
# d) et e)
fc[5] <- 3
length(fc) <- 5 # mais l'élément ajouté prend une valeur manquante
# a) et c) ne fonctionnent pas, car la fonction c transforme le facteur en vecteur,
# ce qui provoque la perte des étiquettes de niveaux
# b) ne fonctionne pas, car il s'agit d'un appel à la fonction factor et 3 est la
# valeur fournie à l'argument levelsSoit le facteur fc créé comme suit.
fc <- factor(c(9, 9, 3, 9))
Lesquelles des commandes suivantes permettent de modifier les niveaux de ce facteur ?
La modalité 3 doit devenir “a” et la modalité 9 doit devenir “b”.
# a)
levels(fc) <- c("a", "b")
# b)
nlevels(fc) <- c("a", "b")
# c)
fc[3] <- "a"; fc[-3] <- "b"
# d)
fc <- factor(c("b", "b", "a", "b"))
# e)
levels(fc) <- c("b", "a")
# a) et d)
levels(fc) <- c("a", "b")
fc <- factor(c("b", "b", "a", "b")) # solution non optimale, car tous les éléments sont
# remplacés individuellement
# b) ne fonctionne pas, car la fonction nlevels ne sert qu'à retourner le nombre de
# modalités du facteur
# c) ne fonctionne pas, car nous tentons de remplacer une valeur par une modalité
# inexistante
# e) ne fonctionne pas, car les modalités ont été inverséesCréez un vecteur contenant une séquence de nombres, allant de -2 à 6 inclusivement, par bonds de 2.
FALSE?seq1 <- seq(from = -2, to = 6, by = 2)
# 1.
seq1
typeof(seq1)
# Il s'agit de données réelles.
# 2.
seq2 <- as.integer(seq1)
seq2
typeof(seq2)
seq1 == seq2
# Même si les données sont passées du type réel au type entier,
# leur valeurs n'ont pas changées puisque seq1 contient en fait
# des nombres entiers au sens mathématiques, mais stockés sous
# forme réelle d'un point de vue informatique.
# Remarque :
identical(seq1, seq2)
# Les objets seq1 et seq2 ne sont pas formellement identiques
# puisqu'ils ne contiennent pas des données du même type.
# 3.
seq3 <- as.logical(seq1)
seq3
typeof(seq3)
# Seule la valeur 0 est transformée en FALSE.
# Toutes les autres valeurs deviennent des TRUE.