Este tutorial tiene como objetivo presentar la colección de funciones apply (). La función apply () es la más básica de todas las colecciones. También aprenderemos sapply (), lapply () y tapply (). La colección de solicitudes se puede ver como un sustituto del ciclo.
La colección apply () se incluye con el paquete esencial r si instala R con Anaconda. La función apply () se puede alimentar con muchas funciones para realizar aplicaciones redundantes en una colección de objetos (marco de datos, lista, vector, etc.). El propósito de apply () es principalmente evitar usos explícitos de construcciones de bucle. Se pueden usar para una lista de entrada, matriz o matriz y aplicar una función. Cualquier función se puede pasar a apply ().
En este tutorial, aprenderá
- función aplicar ()
- función lapply ()
- función sapply ()
- Vector de rebanada
- función tapply ()
función aplicar ()
apply () toma el marco de datos o la matriz como entrada y da la salida en vector, lista o matriz. La función apply () se usa principalmente para evitar usos explícitos de construcciones de bucle. Es la más básica de todas las colecciones que se pueden utilizar sobre una matriz.
Esta función toma 3 argumentos:
apply(X, MARGIN, FUN)Here:-x: an array or matrix-MARGIN: take a value or range between 1 and 2 to define where to apply the function:-MARGIN=1`: the manipulation is performed on rows-MARGIN=2`: the manipulation is performed on columns-MARGIN=c(1,2)` the manipulation is performed on rows and columns-FUN: tells which function to apply. Built functions like mean, median, sum, min, max and even user-defined functions can be applied>
El ejemplo más simple es sumar una matriz sobre todas las columnas. El código apply (m1, 2, sum) aplicará la función de suma a la matriz 5x6 y devolverá la suma de cada columna accesible en el conjunto de datos.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Producción:
Práctica recomendada: almacene los valores antes de imprimirlos en la consola.
función lapply ()
La función lapply () es útil para realizar operaciones en objetos de lista y devuelve un objeto de lista de la misma longitud que el conjunto original. lappy () devuelve una lista de longitud similar a la del objeto de lista de entrada, cada elemento del cual es el resultado de aplicar FUN al elemento correspondiente de la lista. lapply () toma una lista, un vector o un marco de datos como entrada y da una salida en la lista.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
l en lapply () significa lista. La diferencia entre lapply () y apply () se encuentra entre el retorno de salida. La salida de lapply () es una lista. lapply () se puede usar para otros objetos como marcos de datos y listas.
La función lapply () no necesita MARGEN.
Un ejemplo muy sencillo puede ser cambiar el valor de cadena de una matriz a minúsculas con la función tolower. Construimos una matriz con el nombre de las películas famosas. El nombre está en mayúsculas.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Producción:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Podemos usar unlist () para convertir la lista en un vector.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Producción:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
función sapply ()
La función sapply () toma una lista, vector o marco de datos como entrada y da salida en vector o matriz. Es útil para operaciones en objetos de lista y devuelve un objeto de lista de la misma longitud que el conjunto original. La función sapply () hace el mismo trabajo que la función lapply () pero devuelve un vector.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Podemos medir la velocidad mínima y las distancias de frenado de los automóviles a partir del conjunto de datos de automóviles.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Producción:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Producción:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Producción:
## $speed## [1] 25## $dist## [1] 120
smxcars
Producción:
## speed dist## 25 120
Podemos usar una función incorporada por el usuario en lapply () o sapply (). Creamos una función llamada avg para calcular el promedio del mínimo y máximo del vector.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Producción
## speed dist## 14.5 61.0
La función sapply () es más eficiente que lapply () en la salida devuelta porque sapply () almacena valores directamente en un vector. En el siguiente ejemplo, veremos que no siempre es así.
Podemos resumir la diferencia entre apply (), sapply () y `lapply () en la siguiente tabla:
Función |
Argumentos |
Objetivo |
Aporte |
Producción |
---|---|---|---|---|
aplicar |
aplicar (x, MARGEN, FUN) |
Aplicar una función a las filas o columnas o ambas |
Marco de datos o matriz |
vector, lista, matriz |
lapear |
lapply (X, FUN) |
Aplicar una función a todos los elementos de la entrada. |
Lista, vector o marco de datos |
lista |
sapply |
cursi (X divertido) |
Aplicar una función a todos los elementos de la entrada. |
Lista, vector o marco de datos |
vector o matriz |
Vector de rebanada
Podemos usar lapply () o sapply () intercambiables para cortar un marco de datos. Creamos una función, below_average (), que toma un vector de valores numéricos y devuelve un vector que solo contiene los valores que están estrictamente por encima del promedio. Comparamos ambos resultados con la función idéntica ().
below_ave <- function(x) {ave <- mean(x)return(x[x > ave])}dt_s<- sapply(dt, below_ave)dt_l<- lapply(dt, below_ave)identical(dt_s, dt_l)
Producción:
## [1] TRUE
función tapply ()
tapply () calcula una medida (media, mediana, mínima, máxima, etc.) o una función para cada variable de factor en un vector. Es una función muy útil que le permite crear un subconjunto de un vector y luego aplicar algunas funciones a cada uno de los subconjuntos.
tapply(X, INDEX, FUN = NULL)Arguments:-X: An object, usually a vector-INDEX: A list containing factor-FUN: Function applied to each element of x
Parte del trabajo de un científico de datos o investigadores es calcular resúmenes de variables. Por ejemplo, mida el promedio o los datos de grupo en función de una característica. La mayoría de los datos están agrupados por ID, ciudad, países, etc. Resumir sobre el grupo revela patrones más interesantes.
Para entender cómo funciona, usemos el conjunto de datos de iris. Este conjunto de datos es muy famoso en el mundo del aprendizaje automático. El propósito de este conjunto de datos es predecir la clase de cada una de las tres especies de flores: Sepal, Versicolor, Virginica. El conjunto de datos recopila información para cada especie sobre su longitud y ancho.
Como trabajo previo, podemos calcular la mediana de la longitud de cada especie. tapply () es una forma rápida de realizar este cálculo.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Producción:
## setosa versicolor virginica## 3.4 2.8 3.0