Dang it....you are right Greg. names <- c("ABC", "ABCD", "ABCDE", "ABCDEF")
> substr(names, 1, nchar(names) - 1) [1] "AB" "ABC" "ABCD" "ABCDE" and...that is faster than using gsub(). Thanks for catching that....now it's time for cawfee.... Marc On Apr 30, 2010, at 6:28 PM, Greg Snow wrote: > No, substr is vectorized, you just have a typo, you are using a different > vector for nchar than you are subsetting. > > -- > Gregory (Greg) L. Snow Ph.D. > Statistical Data Center > Intermountain Healthcare > greg.s...@imail.org > 801.408.8111 > > >> -----Original Message----- >> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r- >> project.org] On Behalf Of Marc Schwartz >> Sent: Friday, April 30, 2010 5:04 PM >> To: Sebastian Kruk >> Cc: r-help@r-project.org; r-h...@stat.math.ethz.ch >> Subject: Re: [R] drop last character in a names'vector >> >> >> On Apr 30, 2010, at 5:44 PM, Sebastian Kruk wrote: >> >>> Hi, i have a vector filled with names: >>> >>> [1] Alvaro Adela ... >>> [25] Beatriz Berta ... >>> ... >>> [100000] ... >>> >>> I would like to drop last character in every name. >>> >>> I use the next program: >>> >>> for (i in 1:100000) { >>> largo <- nchar(names[i]-1) >>> names[i] <- substring (names[i],1,largo] >>> } >>> >>> Is another and faster way of do it? >>> >>> Thanks, >>> >>> Sebastián. >> >> >> As is the case with R, more than one, but the fastest may be: >> >> names <- c("Alvaro Adela", "Beatriz Berta") >> >>> gsub("^(.*).{1}$", "\\1", names) >> [1] "Alvaro Adel" "Beatriz Bert" >> >> >> Just to show that it works with entries of varying lengths: >> >>> gsub("^(.*).{1}$", "\\1", c("ABC", "ABCD", "ABCDE", "ABCDEF")) >> [1] "AB" "ABC" "ABCD" "ABCDE" >> >> >> See ?gsub and ?regex >> >> >> >> You could use substr(), but the arguments for substring lengths are not >> vectorized, so the following won't work: >> >>> substr(c("ABC", "ABCD", "ABCDE", "ABCDEF"), 1, nchar(names) - 1) >> [1] "ABC" "ABCD" "ABCDE" "ABCDEF" >> >> >> You would have to do something like this: >> >>> as.vector(sapply(c("ABC", "ABCD", "ABCDE", "ABCDEF"), >> function(x) substr(x, 1, nchar(x) - 1))) >> [1] "AB" "ABC" "ABCD" "ABCDE" >> >> >> See ?substr and ?nchar >> >> HTH, >> >> Marc Schwartz ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.