blob: 4ee97ce7302cec957697516b1f8e6482ca5758d9 [file] [log] [blame]
% File src/library/base/man/matrix.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2013 R Core Team
% Distributed under GPL 2 or later
\name{matrix}
\alias{matrix}
\alias{as.matrix}
\alias{as.matrix.default}
\alias{as.matrix.data.frame}
\alias{is.matrix}
\title{Matrices}
\description{
\code{matrix} creates a matrix from the given set of values.
\code{as.matrix} attempts to turn its argument into a matrix.
\code{is.matrix} tests if its argument is a (strict) matrix.
}
\usage{
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
dimnames = NULL)
as.matrix(x, \dots)
\method{as.matrix}{data.frame}(x, rownames.force = NA, \dots)
is.matrix(x)
}
\arguments{
\item{data}{an optional data vector (including a list or
\code{\link{expression}} vector). Non-atomic classed \R objects are
coerced by \code{\link{as.vector}} and all attributes discarded.}
\item{nrow}{the desired number of rows.}
\item{ncol}{the desired number of columns.}
\item{byrow}{logical. If \code{FALSE} (the default) the matrix is
filled by columns, otherwise the matrix is filled by rows.}
\item{dimnames}{A \code{\link{dimnames}} attribute for the matrix:
\code{NULL} or a \code{list} of length 2 giving the row and column
names respectively. An empty list is treated as \code{NULL}, and a
list of length one as row names. The list can be named, and the
list names will be used as names for the dimensions.}
\item{x}{an \R object.}
\item{\dots}{additional arguments to be passed to or from methods.}
\item{rownames.force}{logical indicating if the resulting matrix
should have character (rather than \code{NULL})
\code{\link{rownames}}. The default, \code{NA}, uses \code{NULL}
rownames if the data frame has \sQuote{automatic} row.names or for a
zero-row data frame.}
}
\details{
If one of \code{nrow} or \code{ncol} is not given, an attempt is
made to infer it from the length of \code{data} and the other
parameter. If neither is given, a one-column matrix is returned.
If there are too few elements in \code{data} to fill the matrix,
then the elements in \code{data} are recycled. If \code{data} has
length zero, \code{NA} of an appropriate type is used for atomic
vectors (\code{0} for raw vectors) and \code{NULL} for lists.
\code{is.matrix} returns \code{TRUE} if \code{x} is a vector and has a
\code{"\link{dim}"} attribute of length 2 and \code{FALSE} otherwise.
Note that a \code{\link{data.frame}} is \strong{not} a matrix by this
test. The function is generic: you can write methods to handle
specific classes of objects, see \link{InternalMethods}.
\code{as.matrix} is a generic function. The method for data frames
will return a character matrix if there is only atomic columns and any
non-(numeric/logical/complex) column, applying \code{\link{as.vector}}
to factors and \code{\link{format}} to other non-character columns.
Otherwise, the usual coercion hierarchy (logical < integer < double <
complex) will be used, e.g., all-logical data frames will be coerced
to a logical matrix, mixed logical-integer will give a integer matrix,
etc.
The default method for \code{as.matrix} calls \code{as.vector(x)}, and
hence e.g.\sspace{}coerces factors to character vectors.
When coercing a vector, it produces a one-column matrix, and
promotes the names (if any) of the vector to the rownames of the matrix.
\code{is.matrix} is a \link{primitive} function.
The \code{print} method for a matrix gives a rectangular layout with
dimnames or indices. For a list matrix, the entries of length not
one are printed in the form \samp{integer,7} indicating the type
and length.
}
\note{
If you just want to convert a vector to a matrix, something like
\preformatted{ dim(x) <- c(nx, ny)
dimnames(x) <- list(row_names, col_names)
}
will avoid duplicating \code{x}.
}
\references{
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
\emph{The New S Language}.
Wadsworth & Brooks/Cole.
}
\seealso{
\code{\link{data.matrix}}, which attempts to convert to a numeric
matrix.
A matrix is the special case of a two-dimensional \code{\link{array}}.
}
\examples{
is.matrix(as.matrix(1:10))
!is.matrix(warpbreaks) # data.frame, NOT matrix!
warpbreaks[1:10,]
as.matrix(warpbreaks[1:10,]) # using as.matrix.data.frame(.) method
## Example of setting row and column names
mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE,
dimnames = list(c("row1", "row2"),
c("C.1", "C.2", "C.3")))
mdat
}
\keyword{array}
\keyword{algebra}