R non ha un tipo di dato Set separato: usa invece diverse funzioni per eseguire operazioni simili sui vettori.
L'operatore %in% verifica l'appartenenza a un insieme.
2 %in% 1:10 # TRUE
12 %in% 1:10 # FALSE
Tra le funzioni rilevanti ci sono unique (per rimuovere i duplicati), oltre a union(), intersect(), setdiff() e setequal() per operare su coppie di insiemi.
> 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
In ogni caso, set_1 e set_2 restano invariati.
Ozan sta mettendo insieme una playlist per un prossimo viaggio su strada. Non vuole ascoltare lo stesso brano più di una volta, ma la playlist è diventata così lunga che ormai ha difficoltà a ricordare quali brani ha già aggiunto.
L'API del lettore musicale di Ozan sa lavorare solo con i vettori. Non sono possibili cicli espliciti né logica if/else. Ha bisogno del tuo aiuto!
Implementa la funzione remove_duplicates, che prende una playlist come parametro e restituisce una nuova playlist in cui tutti i brani sono unici.
> 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"
Implementa la funzione has_track, che prende una playlist e un brano come parametri e restituisce un booleano che indica se la playlist contiene il brano.
> 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
Implementa la funzione add_tracks, che prende una playlist e un vettore di uno o più brani come parametri e restituisce una nuova playlist che include i brani.
> 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"
Implementa la funzione delete_tracks, che prende una playlist e uno o più brani come parametri e restituisce una nuova playlist che non include i brani.
> 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 conosce un nuovo amico e si chiede quanto simili siano i loro gusti.
Implementa la funzione find_common_tracks, che prende due playlist e restituisce una nuova playlist contenente solo i brani presenti in entrambe.
> 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"
Iscriviti a Exercism per imparare e padroneggiare R con 21 concetti111 esercizi e il mentoring di persone reali, tutto gratis.