% File src/library/base/man/c.Rd % Part of the R package, https://www.R-project.org % Copyright 1995-2023 R Core Team % Distributed under GPL 2 or later \name{c} \title{Combine Values into a Vector or List} \alias{c} \alias{c.default}% existing "conceptually", see ../../tools/R/QC.R \usage{ ## S3 Generic function c(\dots) \S3method{c}{default}(\dots, recursive = FALSE, use.names = TRUE) } \description{ This is a generic function which combines its arguments. The default method combines its arguments to form a vector. All arguments are coerced to a common type which is the type of the returned value, and all attributes except names are removed. } \arguments{ \item{\dots}{objects to be concatenated. All \code{\link{NULL}} entries are dropped before method dispatch unless at the very beginning of the argument list.} \item{recursive}{logical. If \code{recursive = TRUE}, the function recursively descends through lists (and pairlists) combining all their elements into a vector.} \item{use.names}{logical indicating if \code{\link{names}} should be preserved.} } \details{ The output type is determined from the highest type of the components in the hierarchy NULL < raw < logical < integer < double < complex < character < list < expression. Pairlists are treated as lists, whereas non-vector components (such as \code{\link{name}}s / \code{symbol}s and \code{\link{call}}s) are treated as one-element \code{\link{list}}s which cannot be unlisted even if \code{recursive = TRUE}. If the output type is \code{\link{complex}}, logical, integer, and double \code{NA}s keep their imaginary parts zero when coerced, and hence will \emph{not} become \code{NA_complex_} (with imaginary part \code{NA}). There is a \code{\link{c.factor}} method which combines factors into a factor. \code{c} is sometimes used for its side effect of removing attributes except names, for example to turn an \code{\link{array}} into a vector. \code{as.vector} is a more intuitive way to do this, but also drops names. Note that \code{c} methods other than the default are not required to remove attributes (and they will almost certainly preserve a class attribute). This is a \link{primitive} function. } \value{ \code{NULL} or an expression or a vector of an appropriate mode. (With no arguments the value is \code{NULL}.) } \section{S4 methods}{ This function is S4 generic, but with argument list \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{unlist}} and \code{\link{as.vector}} to produce attribute-free vectors. } \examples{ c(1, 7:9) c(1:5, 10.5, "next") ## uses with a single argument to drop attributes x <- 1:4 names(x) <- letters[1:4] x c(x) # has names as.vector(x) # no names dim(x) <- c(2,2) x c(x) as.vector(x) ## append to a list: ll <- list(A = 1, c = "C") ## do *not* use c(ll, d = 1:3) # which is == c(ll, as.list(c(d = 1:3))) ## but rather c(ll, d = list(1:3)) # c() combining two lists ## descend through lists: c(list(A = c(B = 1)), recursive = TRUE) c(list(A = c(B = 1, C = 2), B = c(E = 7)), recursive = TRUE) } \keyword{manip}