Indexer des matrices
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 18 sur 64.
m[i, j] est la valeur située à la ligne i et à la colonne j. Laissez un côté vide pour prendre une ligne ou une colonne entière : m[i, ] correspond à la ligne i et m[, j] correspond à la colonne j.
m <- matrix(1:6, nrow = 2, byrow = TRUE)
print(m[2, 3])
print(m[1, ])
print(m[, 2])Sortie :
[1] 6
[1] 1 2 3
[1] 2 5Les mêmes indices fonctionnent à gauche de <-, ainsi une cellule, une ligne ou une colonne peut être remplacée :
m <- matrix(0, nrow = 2, ncol = 3)
m[1, 2] <- 5
m[2, ] <- c(7, 8, 9)
print(m)Résultat :
[,1] [,2] [,3]
[1,] 0 5 0
[2,] 7 8 9Les lignes et les colonnes peuvent avoir des noms, définis avec rownames() et colnames(). Un nom fonctionne alors comme un index :
sales <- matrix(c(3, 5, 2, 8), nrow = 2, byrow = TRUE)
rownames(sales) <- c("north", "south")
colnames(sales) <- c("jan", "feb")
print(sales["south", "feb"])
print(sales[, "jan"])Sortie :
[1] 8
north south
3 2 Les vecteurs d’indices sélectionnent simultanément un bloc de lignes et de colonnes :
m <- matrix(1:9, nrow = 3, byrow = TRUE)
print(m[1:2, 2:3])
print(m[c(1, 3), 1])Sortie :
[,1] [,2]
[1,] 2 3
[2,] 5 6
[1] 1 7Défi
FacileComplétez cell_report(m, r, c). Retournez trois lignes : Cell: avec la valeur à la ligne r et à la colonne c, Row: avec les valeurs de la ligne r, et Column: avec les valeurs de la colonne c. Séparez les valeurs par des espaces simples.
Le code fourni lit une matrice sur une ligne : les lignes sont séparées par ; et les valeurs d’une ligne par ,, ainsi 1,2;3,4 est une matrice dont les lignes sont 1 2 et 3 4. Les deux lignes suivantes contiennent r et c. Le code affiche chaque ligne retournée.
Essayez vous-même
cell_report <- function(m, r, c) {
# Écrivez votre code ici
c("Cell: ", "Row: ", "Column: ")
}
# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
rows <- strsplit(line, ";")[[1]]
matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(cell_report(parse_matrix(input[1]), as.numeric(input[2]), as.numeric(input[3])), sep = "\n")
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et flux d’exécution
1Les chaînes en profondeur
Sous-chaînes avec substr()Mise en forme avec sprintf()Scinder et joindreRechercher dans les chaînesRemplacer du texteRécapitulatif - Créateur de nom d'utilisateur4Matrices
Créer des matricesIndexer des matricesRécapitulatifs des lignes et des colonnesArithmétique matricielleRécapitulatif - Plan de salle7La famille Apply
lapply et sapplyMap et mapplyFilter et FindReduceRécapitulatif - Pipeline de données10Structures de contrôle avancées
La fonction switch()ifelse() vectorisérepeat et breakFonctions récursivesRécapitulatif – Classificateur de notes2Recherches par clé-valeur
Recherches dans des vecteurs nommésVérifier les clésAjouter et supprimer des clésParcourir les nomsRécapitulatif - Bureau des stocks5Projet - Carnet de notes
Ajouter des élèvesEnregistrer les notes3Ensembles et comptage
Valeurs uniquesOpérations sur les ensemblesTests d’appartenanceCompter avec table()Récapitulatif - Invités à l’événement6Les fonctions comme valeurs
Fonctions anonymesPasser des fonctionsRetourner des fonctionsFermetures avec étatRécapitulatif - Règles de remise9Data Frames
Créer des Data FramesColonnes et lignesFiltrer les lignesAjouter et trierRécapitulatif - Rapport des ventes12Projet - Suivi des dépenses
Enregistrer les dépensesDépenses totalesEntraînez-vous par vous-même : Compilateur R en ligne