This section provides details on the construction and manipulation of these objects, including matrix facilities that are different from typical element-wise operations.
Matrices
Matrix multiplication
The operator %*%
is used for matrix multiplication.
An n by 1 or 1 by n matrix may of course be
used as an n-vector if in the context such is appropriate.
Conversely, vectors which occur in matrix multiplication expressions are
automatically promoted either to row or column vectors, whichever is
multiplicatively coherent, if possible, (although this is not always
unambiguously possible, as we see later).
If, for example, A
and B
are square matrices of the same
size, then
> A * B
is the matrix of element by element products and
> A %*% B
is the matrix product. If x
is a vector, then
> x %*% A %*% x
is a quadratic form.
The function crossprod()
forms "crossproducts", meaning that
crossprod(X, y)
is the same as t(X) %*% y
but the
operation is more efficient. If the second argument to
crossprod()
is omitted it is taken to be the same as the first.
The meaning of diag()
depends on its argument. diag(v)
,
where v
is a vector, gives a diagonal matrix with elements of the
vector as the diagonal entries. On the other hand diag(M)
, where
M
is a matrix, gives the vector of main diagonal entries of
M
. This is the same convention as that used for diag()
in
MATLAB. Also, somewhat confusingly, if k
is a single
numeric value then diag(k)
is the k
by k
identity
matrix!