Menu
Coddy logo textTech

Opérations sur les ensembles

Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 13 sur 64.

Trois fonctions combinent deux vecteurs comme des ensembles. Chacune renvoie des valeurs sans répétitions :

union(a, b) contient les valeurs présentes dans l’un ou l’autre vecteur, intersect(a, b) les valeurs présentes dans les deux, et setdiff(a, b) les valeurs de a qui ne se trouvent pas dans b.

mon <- c("ana", "ben", "cy")
tue <- c("ben", "dee", "cy", "ben")
print(union(mon, tue))
print(intersect(mon, tue))
print(setdiff(mon, tue))

Résultat :

[1] "ana" "ben" "cy"  "dee"
[1] "ben" "cy" 
[1] "ana"

setdiff() dépend de l’ordre de ses arguments. Inversez-les pour obtenir les valeurs qui se trouvent uniquement dans le deuxième vecteur :

mon <- c("ana", "ben", "cy")
tue <- c("ben", "dee", "cy")
print(setdiff(tue, mon))

Sortie :

[1] "dee"

Lorsqu’il ne reste plus rien, le résultat est un vecteur vide, character(0) pour le texte :

print(intersect(c("a", "b"), c("x", "y")))

Sortie :

character(0)

Les résultats conservent l’ordre du premier vecteur. Triez-les lorsque la sortie doit suivre un ordre prévisible, et vérifiez si le résultat est vide avant de les joindre :

a <- c("pear", "fig", "kiwi")
b <- c("kiwi", "pear")
both <- sort(intersect(a, b))
print(paste(both, collapse = ", "))
print(length(setdiff(b, a)) == 0)

Sortie :

[1] "kiwi, pear"
[1] TRUE
challenge icon

Défi

Facile

Complétez compare_courses(a, b). a et b sont les étudiants de deux cours. Retournez trois lignes :

  • Both: suivi des étudiants des deux cours
  • Only first: suivi des étudiants présents uniquement dans a
  • Total: suivi du nombre d’étudiants différents dans les deux cours

Triez les noms de chaque liste et joignez-les avec , . Une liste vide s’écrit none.

Le code fourni lit les deux cours sous forme de lignes séparées par des virgules et affiche chaque ligne retournée.

Essayez vous-même

compare_courses <- function(a, b) {
  # Écrivez votre code ici
  c("Both: ", "Only first: ", "Total: 0")
}

# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(compare_courses(strsplit(input[1], ",")[[1]], strsplit(input[2], ",")[[1]]), sep = "\n")
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur R en ligne