Récapitulatifs des lignes et des colonnes
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 19 sur 64.
rowSums() et rowMeans() renvoient un résultat par ligne ; colSums() et colMeans(), un par colonne. Ici, chaque ligne représente un étudiant et chaque colonne un test :
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(rowMeans(scores))
print(colSums(scores))Résultat :
[1] 80.00000 73.33333
[1] 140 165 155Pour tout autre résumé, apply(m, 1, f) appelle f sur chaque ligne et apply(m, 2, f) sur chaque colonne :
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(apply(scores, 1, max))
print(apply(scores, 2, min))Résultat :
[1] 90 85
[1] 60 75 70Combinez un résumé avec which.max() pour trouver quelle ligne ou colonne l’emporte :
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
best_test <- which.max(colMeans(scores))
print(best_test)
print(round(rowMeans(scores), 1))Résultat :
[1] 2
[1] 80.0 73.3apply() accepte également une fonction que vous écrivez directement avec function(r). Ici, elle compte les valeurs supérieures à 5 dans chaque ligne :
m <- matrix(c(3, 8, 1, 9, 2, 7), nrow = 2, byrow = TRUE)
print(apply(m, 1, function(r) sum(r > 5)))Sortie :
[1] 1 2Défi
FacileComplétez class_report(scores). Chaque ligne de scores correspond à un étudiant et chaque colonne à un test. Renvoyez une ligne par étudiant, Student 1: 81.7, avec la moyenne de l’étudiant arrondie à une décimale. Ajoutez une dernière ligne Best test: suivie du numéro de la colonne ayant la moyenne la plus élevée.
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. Le code affiche chaque ligne renvoyée.
Essayez vous-même
class_report <- function(scores) {
# Écrivez votre code ici
character(0)
}
# 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(class_report(parse_matrix(input[1])), 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