blob: abf0e026fdd9c6188953f5d8f82f57a86170fa7e [file] [log] [blame]
% File src/library/base/man/make.names.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2013 R Core Team
% Distributed under GPL 2 or later
\name{make.names}
\alias{make.names}
\title{Make Syntactically Valid Names}
\description{
Make syntactically valid names out of character vectors.
}
\usage{
make.names(names, unique = FALSE, allow_ = TRUE)
}
\arguments{
\item{names}{character vector to be coerced to syntactically valid
names. This is coerced to character if necessary.}
\item{unique}{logical; if \code{TRUE}, the resulting elements are
unique. This may be desired for, e.g., column names.}
\item{allow_}{logical. For compatibility with \R prior to 1.9.0.}
}
\value{
A character vector of same length as \code{names} with each changed to
a syntactically valid name, in the current locale's encoding.
}
\details{
A syntactically valid name consists of letters, numbers and the dot or
underline characters and starts with a letter or the dot not followed
by a number. Names such as \code{".2way"} are not valid, and neither
are the \link{reserved} words.
The definition of a \emph{letter} depends on the current locale, but
only ASCII digits are considered to be digits.
The character \code{"X"} is prepended if necessary.
All invalid characters are translated to \code{"."}. A missing value
is translated to \code{"NA"}. Names which match \R keywords have a dot
appended to them. Duplicated values are altered by
\code{\link{make.unique}}.
}
\section{Warning}{
Some OSes, notably FreeBSD, report extremely incorrect information about
which characters are alphabetic in some locales (typically, all
multi-byte locales including UTF-8 locales). However, \R provides
substitutes on Windows, macOS and AIX.
}
\note{
Prior to \R version 1.9.0, underscores were not valid in variable names,
and code that relies on them being converted to dots will no longer
work. Use \code{allow_ = FALSE} for back-compatibility.
\code{allow_ = FALSE} is also useful when creating names for export to
applications which do not allow underline in names (for example,
S-PLUS and some DBMSes).
}
\seealso{
\code{\link{make.unique}},
\code{\link{names}},
\code{\link{character}},
\code{\link{data.frame}}.
}
\examples{
make.names(c("a and b", "a-and-b"), unique = TRUE)
# "a.and.b" "a.and.b.1"
make.names(c("a and b", "a_and_b"), unique = TRUE)
# "a.and.b" "a_and_b"
make.names(c("a and b", "a_and_b"), unique = TRUE, allow_ = FALSE)
# "a.and.b" "a.and.b.1"
make.names(c("", "X"), unique = TRUE)
# "X.1" "X" currently; R up to 3.0.2 gave "X" "X.1"
state.name[make.names(state.name) != state.name] # those 10 with a space
}
\keyword{character}