lapply y sapply
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 32 de 64.
lapply(x, f) llama a f para cada elemento de x y devuelve los resultados en una lista, un elemento por cada entrada:
squares <- lapply(1:3, function(i) i^2)
print(length(squares))
print(squares[[3]])Salida:
[1] 3
[1] 9sapply() hace lo mismo y simplifica el resultado: cuando cada llamada devuelve un valor, obtienes un vector simple en lugar de una lista:
print(sapply(1:3, function(i) i^2))
print(sapply(c(4, 9, 16), sqrt))Resultado:
[1] 1 4 9
[1] 2 3 4En un vector de caracteres, sapply() asigna nombres a los resultados según las entradas. Añade USE.NAMES = FALSE para obtener un vector simple:
words <- c("tea", "coffee")
print(sapply(words, nchar))
print(sapply(words, nchar, USE.NAMES = FALSE))Salida:
tea coffee
3 6
[1] 3 6Estas funciones reemplazan el bucle que construye un resultado elemento por elemento. Ambas versiones siguientes calculan cuántas vocales tiene cada palabra:
words <- c("banana", "sky", "idea")
vowels <- function(w) sum(strsplit(w, "")[[1]] %in% c("a", "e", "i", "o", "u"))
counts <- c()
for (w in words) counts <- c(counts, vowels(w))
print(counts)
print(sapply(words, vowels, USE.NAMES = FALSE))Salida:
[1] 3 0 3
[1] 3 0 3Desafío
FácilCompleta vowel_counts(words). Devuelve una línea por palabra, banana: 3, con el número de vocales (a, e, i, o, u) de la palabra. Usa sapply() para contar las vocales de todas las palabras.
El código proporcionado lee las palabras como una línea separada por comas de palabras en minúsculas e imprime cada línea devuelta.
Pruébalo tú mismo
vowel_counts <- function(words) {
# Escribe tu código aquí
character(0)
}
# Código de entrada/salida suministrado: déjalo como está
input <- suppressWarnings(readLines(file("stdin")))
cat(vowel_counts(strsplit(input[1], ",")[[1]]), sep = "\n")
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
1Cadenas a fondo
Subcadenas con substr()Formateo con sprintf()Dividir y unirBuscar cadenasReemplazar textoRepaso - Constructor de nombres de usuario4Matrices
Creación de matricesIndexación de matricesResúmenes de filas y columnasAritmética de matricesRepaso: tabla de asientos2Búsquedas clave-valor
Búsquedas en vectores con nombreComprobar clavesAñadir y eliminar clavesRecorrer nombresRepaso: panel bursátil5Proyecto - Libro de calificaciones
Añadir estudiantesRegistrar calificaciones3Conjuntos y conteo
Valores únicosOperaciones con conjuntosPruebas de pertenenciaConteo con table()Repaso: invitados al evento6Funciones como valores
Funciones anónimasPasar funcionesDevolver funcionesClausuras con estadoRepaso: reglas de descuento9Marcos de datos
Creación de marcos de datosColumnas y filasFiltrado de filasAdición y ordenaciónRepaso - Informe de ventas12Proyecto: Rastreador de gastos
Registro de gastosGasto totalPractica por tu cuenta: Compilador de R online