make.names               package:base               R Documentation

Make Syntactically Valid Names

Description:

     Make syntactically valid names out of character vectors.

Usage:

     make.names(names, unique = FALSE, allow_ = TRUE)

Arguments:

   names: character vector to be coerced to syntactically valid names.
          This is coerced to character if necessary.

  unique: logical; if 'TRUE', the resulting elements are unique.  This
          may be desired for, e.g., column names.

  allow_: logical.  For compatibility with R prior to 1.9.0.

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 '".2way"' are not valid,
     and neither are the reserved words.

     The definition of a _letter_ depends on the current locale, but
     only ASCII digits are considered to be digits.

     The character '"X"' is prepended if necessary. All invalid
     characters are translated to '"."'.  A missing value is translated
     to '"NA"'.  Names which match R keywords have a dot appended to
     them.  Duplicated values are altered by 'make.unique'.

Value:

     A character vector of same length as 'names' with each changed to
     a syntactically valid name, in the current locale's encoding.

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 'allow_ = FALSE' for back-compatibility.

     '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 DBMSs).

See Also:

     'make.unique', 'names', 'character', '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"

     state.name[make.names(state.name) != state.name] # those 10 with a space

