chartr {base} | R Documentation |
Character Translation and Case Folding
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 |
old |
a character string specifying the characters to be translated. If a character vector of length 2 or more is supplied, the first element is used with a warning. |
new |
a character string specifying the translations. If a character vector of length 2 or more is supplied, the first element is used with a warning. |
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. More than one character can be mapped
to a single upper-case character.
casefold
is a wrapper for tolower
and toupper
originally written 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 or Latin-1, when it will be in UTF-8.
Note
These functions are platform-dependent, usually using OS services. The latter can be quite deficient, for example only covering ASCII characters in 8-bit locales. The definition of ‘alphabetic’ is platform-dependent and liable to change over time as most platforms are based on the frequently-updated Unicode tables.
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)))