[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