Making a string concatenation operator in R

Hong Ooi picture Hong Ooi · Jan 19, 2011 · Viewed 12.6k times · Source

I was wondering how one might go about writing a string concatenation operator in R, something like || in SAS, + in Java/C# or & in Visual Basic.

The easiest way would be to create a special operator using %, like

`%+%` <- function(a, b) paste(a, b, sep="")

but this leads to lots of ugly %'s in the code.

I noticed that + is defined in the Ops group, and you can write S4 methods for that group, so perhaps something like that would be the way to go. However, I have no experience with S4 language features at all. How would I modify the above function to use S4?

Answer

statsmaths picture statsmaths · Aug 11, 2013

As others have mentioned, you cannot override the sealed S4 method "+". However, you do not need to define a new class in order to define an addition function for strings; this is not ideal since it forces you to convert the class of strings and thus leading to more ugly code. Instead, one can simply overwrite the "+" function:

"+" = function(x,y) {
    if(is.character(x) || is.character(y)) {
        return(paste(x , y, sep=""))
    } else {
        .Primitive("+")(x,y)
    }
}

Then the following should all work as expected:

1 + 4
1:10 + 4 
"Help" + "Me"

This solution feels a bit like a hack, since you are no longer using formal methods but its the only way to get the exact behavior you wanted.