[R] String manipulation---mixed case

Gabor Grothendieck ggrothendieck at myway.com
Mon Dec 6 13:10:42 CET 2004


Gabor Grothendieck <ggrothendieck <at> myway.com> writes:

: 
: Martin Maechler <maechler <at> stat.math.ethz.ch> writes:
: 
: : 
: : >>>>> "Spencer" == Spencer Graves <spencer.graves <at> pdf.com>
: : >>>>>     on Sun, 05 Dec 2004 13:48:07 -0800 writes:
: : 
: :     Spencer> That's great, Peter. 
: :     Spencer> For pedestrians like me who are not quite as facile with 
: regular 
: :     Spencer> expressions, the following seems slightly more readable: 
: : 
: :     Spencer> s <- "the quick red fox jumps over the lazy brown dog"
: :     Spencer> ss <- strsplit(s, " ")[[1]]
: :     Spencer> ss1 <- substring(ss, 1,1)
: :     Spencer> ss2 <- substring(ss, 2)
: :     Spencer> paste(toupper(ss1), ss2, sep="", collapse=" ")
: : 
: :     Spencer> [1] "The Quick Red Fox Jumps Over The Lazy Brown Dog"
: : 
: : Nice.  Since this has been asked before,
: : and it is something common enoguh that Emacs even has this on a
: : key (M-c), I think it's worth making a small example on the help
: : page for toupper/tolower:
: : 
: : ## "Mixed Case" Capitalizing Function :
: : capitalize <- function(x) {
: :   ## toupper( every first letter of a word ) :
: :   s <- strsplit(x, " ")[[1]]
: :   paste(toupper(substring(s, 1,1)), substring(s, 2), sep="", collapse=" ")
: : }
: : capitalize("the quick red fox jumps over the lazy brown dog")
: : ## ->  [1] "The Quick Red Fox Jumps Over The Lazy Brown Dog"
: 
: or the following variation which is about the same length but
: also (1) handles vectors of strings and (2) does not depend
: on the input being lower case:
: 
: capwords <- function(s) {
[...]

Correction.  Should be:

capwords <- function(s) {
  cap <- function(s) paste( toupper(substring(s,1,1)), 
           tolower(substring(s,2)), sep = "", collapse = " " )
  sapply(strsplit(s, split = " "), cap, USE.NAMES = !is.null(names(s)))
}




More information about the R-help mailing list