Making R’s paste act more like CONCAT

October 31, 2011

[This article was first published on Jermdemo Raised to the Law, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

While vector-friendly, R’s paste function has a few behaviors I don’t particularly like.

One is using a space as the default separator:

> adjectives<-c("lean","fast","strong")
> paste(adjectives,"er")
> paste(adjectives,"er")
[1] "lean er" "fast er" "strong er" #d'oh
> paste(adjectives,"er",sep="")
[1] "leaner" "faster" "stronger"

Empty vectors get an undeserved first class treatment:

> paste(indelPositions,"i",sep="")
[1] "i"
> indelPositions<-c(5,6,7)
> paste(indelPositions,"i",sep="")
[1] "5i" "6i" "7i" #good

> indelPositions<-c()
> paste(indelPositions,"i",sep="")
[1] "i" #not so good

And perhaps worst of all, NA values get replaced with a string called “NA”:

> placing<-"1"
> paste(placing,"st",sep="")
[1] "1st" #awesome

> placing<-NA_integer_
> paste(placing,"st",sep="")
[1] "NAst" #ugh

This is inconvenient in situations where I don’t know a priori if I will get a value, a vector of length 0, or an NA.

Working from Hadley Wickham’s str_c function in the stringr package, I decided to write a paste function that behaves more like CONCAT in SQL:

#catch NULLs, NAs
){"paste", c(strings, list(sep = sep, collapse = collapse)))

This function has the behaviors I expect:

> concat(adjectives,"er")
[1] "leaner" "faster" "stronger"

> concat(indelPositions,"i")

> concat(placing,"st")

That’s more like it!

To leave a comment for the author, please follow the link and comment on their blog: Jermdemo Raised to the Law. offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.

Search R-bloggers


Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)