# crossprod {base}

### Description

Given matrices `x`

and `y`

as arguments, return a matrix cross-product. This is formally equivalent to (but usually slightly faster than) the call `t(x) %*% y`

(`crossprod`

) or `x %*% t(y)`

(`tcrossprod`

).

### Usage

crossprod(x, y = NULL) tcrossprod(x, y = NULL)

### Arguments

- x, y
- numeric or complex matrices:
`y = NULL`

is taken to be the same matrix as`x`

. Vectors are promoted to single-column or single-row matrices, depending on the context.

### Values

A double or complex matrix, with appropriate `dimnames`

taken from `x`

and `y`

.

### References

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

### Note

When `x`

or `y`

are not matrices, they are treated as column or row matrices, but their `names`

are usually **not** promoted to `dimnames`

. Hence, currently, the last example has empty dimnames.

### See Also

`%*%`

and outer product `%o%`

.

### Examples

(z <- crossprod(1:4)) # = sum(1 + 2^2 + 3^2 + 4^2) drop(z) # scalar x <- 1:4; names(x) <- letters[1:4]; x tcrossprod(as.matrix(x)) # is identical(tcrossprod(as.matrix(x)), crossprod(t(x))) tcrossprod(x) # no dimnames m <- matrix(1:6, 2,3) ; v <- 1:3; v2 <- 2:1 stopifnot(identical(tcrossprod(v, m), v %*% t(m)), identical(tcrossprod(v, m), crossprod(v, t(m))), identical(crossprod(m, v2), t(m) %*% v2))

Documentation reproduced from R 3.0.2. License: GPL-2.