CAPÍTULO 4. ESTRUCTURAS DE CONTROL Y MANEJO DE DATOS 73
rían las funciones
sum()
y
prod()
, por medio de
Reduce()
4
:
miSum
<-
function
(
v
)
Reduce
(
"+"
, v)
miProd
<-
function
(
v
)
Reduce
(
"*"
, v)
# Para comparar:
prod
(vv)
## [1] -24
miProd
(vv)
## [1] -24
La aplicación de la función Reduce(), no está limitada a operadores, de he-
cho, la operación puede estar definida por cualquier función de dos argumen-
tos, y, opcionalmente, puede además entregar el arreglo de resultados parcia-
les, cada vez que se aplica la operación. Veamos el siguiente ejemplo:
mif
<-
function
(
a
,
b
) {
return
(a
*
b
/
(a
+
b))
}
#
miOp
<-
function
(
v
)
Reduce
(mif, v)
# Note: mif va sin comillas
# Apliquemos:
miOp
(vv)
## [1] 12
# Otra versión, con resultados parciales y en la que incluso
# la función se da 'en linea':
miOpV2
<-
function
(
v
)
Reduce
(
function
(
a
,
b
) a
*
b
/
(a
+
b), v,
accumulate
=
TRUE
)
miOpV2
(vv)
## [1] -2 -6 12
Nótese que con el argumento
accumulate=TRUE
, la función entrega lo que
la operación da cada vez que se añade un elemento del objeto a la operación.
Esta misma idea de operar con los elementos de los vectores, puede ser lle-
vada más allá, a operar con los elementos de datos más estructurados como
pueden ser las listas y los
data frames
. Para ello, el lenguaje cuenta con un con-
junto de funciones de transformación, clasificación y agregación de datos que
se irán revisando en los siguientes párrafos con ejemplos ilustrativos de su uso.
4
En su forma más simple, la función Reduce(), toma una función u operación binaria y un
objeto compuesto, y la aplica consecutivamente entre el resultado anterior y el siguiente elemento,
tomando inicialmente como primer resultado el primer elemento del objeto.