R: Outer Product of Arrays

outer {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]

[Package base version 2.8.1 Index]