 
          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.