chartr                 package:base                 R Documentation

_C_h_a_r_a_c_t_e_r _T_r_a_n_s_l_a_t_i_o_n _a_n_d _C_a_s_e_f_o_l_d_i_n_g

_D_e_s_c_r_i_p_t_i_o_n:

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

_U_s_a_g_e:

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

_A_r_g_u_m_e_n_t_s:

       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?.

_D_e_t_a_i_l_s:

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

_V_a_l_u_e:

     A character vector of the same length and with the same attributes
     as 'x' (after possible coercion).

_S_e_e _A_l_s_o:

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

_E_x_a_m_p_l_e_s:

     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)))

