outer                  package:base                  R Documentation

Outer Product of Arrays

Description:

     The outer product of the arrays 'X' and 'Y' is the array 'A' with
     dimension 'c(dim(X), dim(Y))' where element 'A[c(arrayindex.x,
     arrayindex.y)] = FUN(X[arrayindex.x], Y[arrayindex.y], ...)'.

Usage:

     outer(X, Y, FUN="*", ...)
     X %o% Y

Arguments:

    X, Y: First and second arguments for function 'FUN'. Typically a
          vector or array.

     FUN: a function to use on the outer products, found _via_
          'match.fun' (except for the special case '"*"').

     ...: optional arguments to be passed to 'FUN'.

Details:

     'X' and 'Y' must be suitable arguments for 'FUN'.  Each will be
     extended by 'rep' to length the products of the lengths of 'X' and
     'Y' before 'FUN' is called.

     'FUN' is called with these two extended vectors as arguments.
     Therefore, it must be a vectorized function (or the name of one),
     expecting at least two arguments.

     Where they exist, the [dim]names of 'X' and 'Y' will be copied to
     the answer, and a dimension assigned which is the concatenation of
     the dimensions of 'X' and 'Y' (or lengths if dimensions do not
     exist).

     'FUN = "*"' is handled internally as a special case, _via_
     'as.vector(X) %*% t(as.vector(Y))', and is intended only for
     numeric vectors and arrays.

     '%o%' is binary operator providing a wrapper for 'outer(x, y,
     "*")'.

Author(s):

     Jonathan Rougier

References:

     Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S
     Language_. Wadsworth & Brooks/Cole.

See Also:

     '%*%' for usual (_inner_) matrix vector multiplication;
     'kronecker' which is based on 'outer'; 'Vectorize' for vectorizing
     a non-vectorized function.

Examples:

     x <- 1:9; names(x) <- x
     # Multiplication & Power Tables
     x %o% x
     y <- 2:8; names(y) <- paste(y,":",sep="")
     outer(y, x, "^")

     outer(month.abb, 1999:2003, FUN = "paste")

     ## three way multiplication table:
     x %o% x %o% y[1:3]

