From hpages at fredhutch.org  Wed Jun 17 02:24:47 2015
From: hpages at fredhutch.org (=?windows-1252?Q?Herv=E9_Pag=E8s?=)
Date: Tue, 16 Jun 2015 17:24:47 -0700
Subject: [Rd] Improving string concatenation
In-Reply-To: <CAKShX4A5bVtxVAG+01QjNH0=LaVr6MH48xXs-OtbQQ2247cc_g@mail.gmail.com>
References: <CAKShX4A5bVtxVAG+01QjNH0=LaVr6MH48xXs-OtbQQ2247cc_g@mail.gmail.com>
Message-ID: <5580BE4F.8060401@fredhutch.org>

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



[Rd] Improving string concatenation
=?windows-1252?Q?Herv=E9_Pag=E8s?=