R no tiene un tipo de dato Set propio, sino que usa una variedad de funciones para realizar operaciones similares sobre vectores.
El operador %in% comprueba la pertenencia a un conjunto.
2 %in% 1:10 # TRUE
12 %in% 1:10 # FALSE
Entre las funciones relevantes están unique (para eliminar duplicados) y también union(), intersect(), setdiff() y setequal(), que operan sobre pares de conjuntos.
> 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
En todos los casos, set_1 y set_2 permanecen sin cambios.
Ozan está preparando una lista de reproducción para un próximo viaje por carretera. No quiere escuchar la misma canción más de una vez, pero la lista se ha vuelto tan larga que ya le cuesta recordar qué canciones ha añadido ya.
La API del reproductor de música de Ozan solo sabe trabajar con vectores. No es posible usar bucles explícitos ni lógica if/else. ¡Necesita tu ayuda!
Implementa la función remove_duplicates, que toma una lista de reproducción como parámetro y devuelve una nueva lista en la que todas las canciones son únicas.
> 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 función has_track, que toma una lista de reproducción y una canción como parámetros y devuelve un Boolean que indica si la lista contiene la canción.
> 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 función add_tracks, que toma una lista de reproducción y un vector de una o más canciones como parámetros y devuelve una nueva lista de reproducción que incluye esas canciones.
> 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 función delete_tracks, que toma una lista de reproducción y una o más canciones como parámetros y devuelve una nueva lista de reproducción que no incluye esas canciones.
> 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 conoce a un nuevo amigo y se pregunta cuánto se parecen sus gustos musicales.
Implementa la función find_common_tracks, que toma dos listas de reproducción y devuelve una nueva lista que contiene solo las canciones presentes en ambas.
> 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"
Regístrate en Exercism para aprender y dominar R con 21 conceptos111 ejercicios y mentoría humana real, todo gratis.