R ne dispose pas d'un type de données ensemble à part entière ; il utilise à la place diverses fonctions pour effectuer des opérations similaires sur des vecteurs.
L'opérateur %in% teste l'appartenance à un ensemble.
2 %in% 1:10 # TRUE
12 %in% 1:10 # FALSE
Parmi les fonctions utiles, on trouve unique (pour supprimer les doublons), ainsi que union(), intersect(), setdiff() et setequal(), qui opèrent sur des paires d'ensembles.
> set_1 <- c("a", "b", "c", "b", "a")
> unique(set_1) # deduplicate
[1] "a" "b" "c"
> set_2 <- c('a', "c", "d")
> union(set_1, set_2) # values in either set
[1] "a" "b" "c" "d"
> intersect(set_1, set_2) # values in both sets
[1] "a" "c"
> setdiff(set_1, set_2) # values in set_1 but not set_2
[1] "b"
> setdiff(set_2, set_1) # values in set_2 but not set_1
[1] "d"
setequal(set_1, c("c", "b", "a", "b")) # are elements the same after deduplication?
[1] TRUE
Dans chaque cas, set_1 et set_2 restent inchangés.
Ozan prépare une playlist pour un road trip à venir. Il ne veut pas écouter la même piste deux fois, mais la playlist est devenue si longue qu'il a du mal à se rappeler quelles pistes ont déjà été ajoutées.
L'API du lecteur de musique d'Ozan ne sait travailler qu'avec des vecteurs. Aucune boucle explicite ni logique if/else n'est possible. Il a besoin de ton aide !
Implémente la fonction remove_duplicates, qui prend une playlist en paramètre et renvoie une nouvelle playlist dont toutes les pistes sont uniques.
> playlist <- c(
"Court and Spark - Joni Mitchell",
"Big Yellow Taxi - Joni Mitchell",
"Court and Spark - Joni Mitchell"
)
> remove_duplicates(playlist)
[1] "Court and Spark - Joni Mitchell" "Big Yellow Taxi - Joni Mitchell"
Implémente la fonction has_track, qui prend une playlist et une piste en paramètres et renvoie un booléen qui indique si la playlist contient la piste.
> playlist <- c(
"The Fashion Show - Grace Jones",
"Dr. Funkenstein - Parliament"
)
> has_track(playlist, "Dr. Funkenstein - Parliament")
[1] TRUE
> has_track(playlist, "Walking in the Rain - Grace Jones")
[1] FALSE
Implémente la fonction add_tracks, qui prend une playlist et un vecteur d'une ou plusieurs pistes en paramètres et renvoie une nouvelle playlist qui contient les pistes.
> playlist <- c("Selma - Bijelo Dugme")
> playlist <- add_tracks(playlist, "Atomic Dog - George Clinton")
> playlist
[1] "Selma - Bijelo Dugme" "Atomic Dog - George Clinton"
> add_tracks(playlist, "Selma - Bijelo Dugme")
[1] "Selma - Bijelo Dugme" "Atomic Dog - George Clinton"
> add_tracks(playlist, c("The Chain - Fleetwood Mac", "Selma - Bijelo Dugme"))
[1] "Selma - Bijelo Dugme" "Atomic Dog - George Clinton" "The Chain - Fleetwood Mac"
Implémente la fonction delete_tracks, qui prend une playlist et une ou plusieurs pistes en paramètres et renvoie une nouvelle playlist qui ne contient pas les pistes.
> playlist <- c(
"The Treasure - Fra Lippo Lippi",
"After the Fall - Klaus Nomi"
)
> playlist <- delete_tracks(playlist, "The Treasure - Fra Lippo Lippi")
> playlist
[1] "After the Fall - Klaus Nomi"
> delete_tracks(playlist, "I Feel the Magic - Belinda Carlisle")
[1] "After the Fall - Klaus Nomi"
Ozan rencontre un nouvel ami et se demande à quel point leurs goûts se ressemblent.
Implémente la fonction find_common_tracks, qui prend deux playlists et renvoie une nouvelle playlist qui ne contient que les pistes présentes dans les deux.
> playlist_1 <- c("Karma - Taylor Swift", "Tired - Adele")
> playlist_2 <- c("Andromeda - Weyes Blood", "Karma - Taylor Swift")
> find_common_tracks(playlist_1, playlist_2)
[1] "Karma - Taylor Swift"
Inscris-toi sur Exercism pour apprendre et maîtriser R avec 21 concepts111 exercices, et un vrai mentorat humain, le tout gratuitement.