Requisito previo: estructuras de datos en programación R
Uno de los mayores problemas con el bucle «for» es su consumo de memoria y su lentitud para ejecutar una tarea repetitiva. Y cuando se trata de manejar un gran conjunto de datos e iterarlo, no se recomienda el bucle for. R proporciona muchas alternativas para aplicar a los vectores para operaciones de bucle que son muy útiles cuando se trabaja de forma interactiva en una línea de comandos. En este artículo, nos ocupamos de apply()
la función y sus variantes:
- apply()
- lapply()
- sapply()
- tapply()
- mapply()
Veamos qué hace cada una de estas funciones.
Función de bucle | Operación |
---|---|
apply() |
Aplica una función sobre los márgenes de un arreglo o array |
lapply() |
Aplicar una función sobre una lista o un vector |
sapply() |
Igual que lapply() pero con resultados simplificados |
tapply() |
Aplicar una función sobre una array irregular |
mapply() |
Versión multivariada delapply() |
apply()
: Esta función aplica una función dada sobre los márgenes de una array dada.
aplicar (array, márgenes, función, …)
array = lista de elementos
márgenes = dimensión de la array a lo largo de la cual se debe aplicar la
función función = la operación que desea realizarEjemplo:
# R program to illustrate
# apply() function
# Creating a matrix
A
=
matrix(
1
:
9
,
3
,
3
)
print
(A)
# Applying apply() over row of matrix
# Here margin 1 is for row
r
=
apply
(A,
1
,
sum
)
print
(r)
# Applying apply() over column of matrix
# Here margin 2 is for column
c
=
apply
(A,
2
,
sum
)
print
(c)
Producción:
[, 1] [, 2] [, 3] [1, ] 1 4 7 [2, ] 2 5 8 [3, ] 3 6 9 [1] 12 15 18 [1] 6 15 24
lapply():
Esta función se utiliza para aplicar una función sobre una lista. Siempre devuelve una lista de la misma longitud que la lista de entrada.
lapply(lista, función, …)
lista =
función de lista creada = la operación que desea realizarEjemplo:
# R program to illustrate
# lapply() function
# Creating a matrix
A
=
matrix(
1
:
9
,
3
,
3
)
# Creating another matrix
B
=
matrix(
10
:
18
,
3
,
3
)
# Creating a list
myList
=
list
(A, B)
# applying lapply()
determinant
=
lapply(myList, det)
print
(determinant)
Producción:
[[1]] [1] 0 [[2]] [1] 5.329071e-15
sapply():
Esta función se utiliza para simplificar el resultado delapply()
, si es posible. A diferencialapply()
de , el resultado no siempre es una lista. La salida varía de las siguientes maneras:-- Si la salida es una lista que contiene elementos que tienen una longitud de 1, se devuelve un vector.
- Si la salida es una lista donde todos los elementos son vectores de la misma longitud (>1), se devuelve una array.
- Si la salida contiene elementos que no se pueden simplificar o elementos de diferentes tipos, se devuelve una lista.
sapply(lista, función, …)
lista =
función de lista creada = la operación que desea realizarEjemplo:
# R program to illustrate
# sapply() function
# Creating a list
A
=
list
(a
=
1
:
5
, b
=
6
:
10
)
# applying sapply()
means
=
sapply(A, mean)
print
(means)
Producción:
a b 3 8
Se devuelve un vector ya que la salida tenía una lista con elementos de longitud 1.
tapply()
: Esta función se utiliza para aplicar una función sobre un subconjunto de vectores dados por una combinación de factores.
tapply(vector, factor, función, …)
vector = vector creado
factor = factor creado
función = la operación que desea realizarEjemplo:
# R program to illustrate
# tapply() function
# Creating a factor
Id
=
c(
1
,
1
,
1
,
1
,
2
,
2
,
2
,
3
,
3
)
# Creating a vector
val
=
c(
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
)
# applying tapply()
result
=
tapply(val,
Id
,
sum
)
print
(result)
Producción:
1 2 3 10 18 17
¿Cómo funciona el código anterior?
mapply()
: Es una versión multivariante delapply()
. Esta función se puede aplicar sobre varias listas simultáneamente.
mapply(función, lista1, lista2, …)
función = la operación que desea realizar
list1, list2 = Listas creadas
Ejemplo:
# R program to illustrate
# mapply() function
# Creating a list
A
=
list
(c(
1
,
2
,
3
,
4
))
# Creating another list
B
=
list
(c(
2
,
5
,
1
,
6
))
# Applying mapply()
result
=
mapply(
sum
, A, B)
print
(result)
Producción:
[1] 24
Publicación traducida automáticamente
Artículo escrito por AmiyaRanjanRout y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA