Menu
Coddy logo textTech

Operaciones con conjuntos

Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 13 de 64.

Tres funciones combinan dos vectores como conjuntos. Cada una devuelve valores sin repeticiones:

union(a, b) contiene los valores de cualquiera de los dos vectores, intersect(a, b) los valores de ambos, y setdiff(a, b) los valores de a que no están en b.

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

Salida:

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

setdiff() depende del orden de sus argumentos. Intercámbialos para obtener los valores que solo están en el segundo vector:

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

Salida:

[1] "dee"

Cuando no queda nada, el resultado es un vector vacío, character(0) para texto:

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

Salida:

character(0)

Los resultados mantienen el orden del primer vector. Ordénalos cuando la salida necesite un orden predecible y comprueba si el resultado está vacío antes de unirlo:

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

Salida:

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

Desafío

Fácil

Completa compare_courses(a, b). a y b son los estudiantes de dos cursos. Devuelve tres líneas:

  • Both: seguido de los estudiantes de ambos cursos
  • Only first: seguido de los estudiantes que solo están en a
  • Total: seguido del número de estudiantes diferentes entre ambos cursos

Ordena los nombres de cada lista y únelos con , . Una lista vacía se escribe como none.

El código proporcionado lee los dos cursos como líneas separadas por comas e imprime cada línea devuelta.

Pruébalo tú mismo

compare_courses <- function(a, b) {
  # Escribe tu código aquí
  c("Both: ", "Only first: ", "Total: 0")
}

# Código de entrada/salida suministrado: déjalo como está
input <- suppressWarnings(readLines(file("stdin")))
cat(compare_courses(strsplit(input[1], ",")[[1]], strsplit(input[2], ",")[[1]]), sep = "\n")
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de R online