# outer

##### Outer Product of Arrays

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], …)
```

.

- Keywords
- array

##### 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
(plus any arguments in `…`

). It must be a vectorized
function (or the name of one) expecting at least two arguments and
returning a value with the same length as the first (and the second).

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 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, "*")`

.

##### 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

`library(base)`

```
# NOT RUN {
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]
# }
```

*Documentation reproduced from package base, version 3.6.0, License: Part of R 3.6.0*