

   AAppppllyy FFuunnccttiioonnss OOvveerr AArrrraayy MMaarrggiinnss

        apply(x, MARGIN, FUN, ...)

   AArrgguummeennttss::

          x: the array to be used.

     MARGIN: a vector giving the subscripts which the function
             will be applied over.  `1' indicates rows, `2'
             indicates columns, `c(1,2)' indicates rows and
             columns.

        FUN: the function to be applied.  In the case of func-
             tions like `+', `%*%', etc., the function name
             must be quoted.

        ...: optional arguments to `FUN'.

   VVaalluuee::

        If each call to `FUN' returns a vector of length `n',
        then `apply' returns an array of dimension
        `c(n,dim(x)[MARGIN])' if `n > 1'.  If `n' equals `1',
        `apply' returns a vector if `MARGIN' has length 1 and
        an array of dimension `dim(x)[MARGIN]' otherwise.

        If the calls to `FUN' return vectors of different
        lengths, `apply' returns a list of length `dim(x)[MAR-
        GIN]'.

   SSeeee AAllssoo::

        `lapply', `tapply', `sweep'.

   EExxaammpplleess::

        ## Compute row and column sums for a matrix:
        x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
        dimnames(x)[[1]] <- letters[1:8]
        apply(x, 2, mean, trim = .2)
        col.sums <- apply(x, 2, sum)
        row.sums <- apply(x, 1, sum)
        rbind(cbind(x, Rtot = row.sums), Ctot = c(col.sums, sum(col.sums)))

        all( apply(x,2, is.vector)) # TRUE [was not in R <= 0.63.2]

        ## Sort the columns of a matrix
        apply(x, 2, sort)

        ##- function with extra args:
        cave <- function(x, c1,c2) c(mean(x[c1]),mean(x[c2]))
        apply(x,1, cave,  c1="x1", c2=c("x1","x2"))

        ma <- matrix(c(1:4, 1, 6:8), nr = 2)
        ma
        apply(ma, 1, table)  #--> a list of length 2
        apply(ma, 1, quantile)# 5 x n matrix with rownames

        all(dim(ma) == dim(apply(ma, 1:2, sum)))## apply BUG [R <= 0.63.0]

        ## Compute row and column sums for a matrix:
        x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
        dimnames(x)[[1]] <- letters[1:8]
        apply(x, 2, mean, trim = .2)
        col.sums <- apply(x, 2, sum)
        row.sums <- apply(x, 1, sum)
        rbind(cbind(x, Rtot = row.sums), Ctot = c(col.sums, sum(col.sums)))

        all( apply(x,2, is.vector)) # TRUE [was not in R <= 0.63.2]

        ## Sort the columns of a matrix
        apply(x, 2, sort)

        ##- function with extra args:
        cave <- function(x, c1,c2) c(mean(x[c1]),mean(x[c2]))
        apply(x,1, cave,  c1="x1", c2=c("x1","x2"))

        ma <- matrix(c(1:4, 1, 6:8), nr = 2)
        ma
        apply(ma, 1, table)  #--> a list of length 2
        apply(ma, 1, quantile)# 5 x n matrix with rownames

        all(dim(ma) == dim(apply(ma, 1:2, sum)))## apply BUG [R <= 0.63.0]

