[Rd] Improving string concatenation

Hervé Pagès hpages at fredhutch.org
Wed Jun 17 02:24:47 CEST 2015


Hi Joshua,

On 06/16/2015 03:32 PM, Joshua Bradley wrote:
> Hi, first time poster here. During my time using R, I have always found
> string concatenation to be (what I feel is) unnecessarily complicated by
> requiring the use of the paste() or similar commands.
>
>
> When searching for how to concatenate strings in R, several top search
> results show answers that say to write your own function or override the
> '+' operator.
>
> Sample code like the following from this
> <http://stackoverflow.com/questions/4730551/making-a-string-concatenation-operator-in-r>
> page
>
> "+" = function(x,y) {
>      if(is.character(x) & is.character(y)) {
>          return(paste(x , y, sep=""))
>      } else {
>          .Primitive("+")(x,y)
>      }}

Note that paste0() is a more convenient and more efficient way to
concatenate strings:

   paste0(x, y)  # no need to specify 'sep', no separator is inserted

Related to this, one thing that has always bothered me is the
different/inconsistent recycling schemes used by different binary
operations in R:

 > 1:3 + integer(0)
integer(0)

 > c("a", "b", "c") >= character(0)
logical(0)

 > paste0(c("a", "b", "c"), character(0))
[1] "a" "b" "c"

 > mapply(paste0, c("a", "b", "c"), character(0))
Error in mapply(paste0, c("a", "b", "c"), character(0)) :
   zero-length inputs cannot be mixed with those of non-zero length

If I was to override `+` to concatenate strings, I would make it stick
to the recycling scheme used by arithmetic and comparison operators
(which is the most sensible of all IMO).

H.

>
>
>
> An old (2005) post
> <https://stat.ethz.ch/pipermail/r-help/2005-February/066709.html> on r-help
> mentioned possible performance reasons as to why this type of string
> concatenation is not supported out of the box but did not go into detail.
> Can someone explain why such a basic task as this must be handled by
> paste() instead of just using the '+' operator directly? Would performance
> degrade much today if the '+' form of string concatenation were added into
> R by default?
>
>
>
> Josh Bradley
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

-- 
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpages at fredhutch.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



More information about the R-devel mailing list