R: Character Translation and Casefolding

chartr {base} | R Documentation

## Character Translation and Casefolding

### Description

Translate characters in character vectors, in particular from upper to lower case or vice versa.

### Usage

    chartr(old, new, x)
    tolower(x)
    toupper(x)
    casefold(x, upper = FALSE)

### Arguments

`x` | a character vector, or an object that can be coerced to character by `as.character`.
`old` | a character string specifying the characters to be translated.
`new` | a character string specifying the translations.
`upper` | logical: translate to upper or lower case?.

### Details

`chartr` translates each character in `x` that is specified in `old` to the corresponding character specified in `new`. Ranges are supported in the specifications, but character classes and repeated characters are not. If `old` contains more characters than new, an error is signaled; if it contains fewer characters, the extra characters at the end of `new` are ignored.

`tolower` and `toupper` convert upper-case characters in a character vector to lower-case, or vice versa. Non-alphabetic characters are left unchanged.

`casefold` is a wrapper for `tolower` and `toupper` provided for compatibility with S-PLUS.

### Value

A character vector of the same length and with the same attributes as `x` (after possible coercion).
Elements of the result will be have the encoding declared as that of the current locale (see `Encoding` if the corresponding input had a declared encoding and the current locale is either Latin-1 or UTF-8. The result will be in the current locale's encoding unless the corresponding input was in UTF-8, when it will be in UTF-8 when the system has Unicode wide characters.

### See Also

`sub` and `gsub` for other substitutions in strings.

### Examples

    x <- "MiXeD cAsE 123"
    chartr("iXs", "why", x)
    chartr("a-cX", "D-Fw", x)
    tolower(x)
    toupper(x)

    ## "Mixed Case" Capitalizing - toupper( every first letter of a word ) :

    .simpleCap <- function(x) {
        s <- strsplit(x, " ")[[1]]
        paste(toupper(substring(s, 1,1)), substring(s, 2),
              sep="", collapse=" ")
    }
    .simpleCap("the quick red fox jumps over the lazy brown dog")
    ## ->  [1] "The Quick Red Fox Jumps Over The Lazy Brown Dog"

    ## and the better, more sophisticated version:
    capwords <- function(s, strict = FALSE) {
        cap <- function(s) paste(toupper(substring(s,1,1)),
                      {s <- substring(s,2); if(strict) tolower(s) else s},
                                 sep = "", collapse = " " )
        sapply(strsplit(s, split = " "), cap, USE.NAMES = !is.null(names(s)))
    }
    capwords(c("using AIC for model selection"))
    ## ->  [1] "Using AIC For Model Selection"
    capwords(c("using AIC", "for MODEL selection"), strict=TRUE)
    ## ->  [1] "Using Aic"  "For Model Selection"
    ##                ^^^        ^^^^^
    ##               'bad'       'good'

    ## -- Very simple insecure crypto --
    rot <- function(ch, k = 13) {
       p0 <- function(...) paste(c(...), collapse="")
       A <- c(letters, LETTERS, " '")
       I <- seq_len(k); chartr(p0(A), p0(c(A[-I], A[I])), ch)
    }

    pw <- "my secret pass phrase"
    (crypw <- rot(pw, 13)) #-> you can send this off

    ## now ``decrypt'' :
    rot(crypw, 54 - 13)# -> the original:
    stopifnot(identical(pw, rot(crypw, 54 - 13)))

[Package base version 2.8.1 Index]