Search code examples
rpolymorphismampersand

Overloading Ampersand & operator in R


I like to overload my ampersand operator with paste. So that way I can paste stuff easily. Like this:

R> "Hello" & " World"
 [1] "Hello World"

And the way I achieve this is:

"&" <- function(...){paste(..., sep = "")}

This is all fine and dandy but you lose the ability to use ampersand as a natural "and" operator. What would be the best, fastest most beautiful way to overload my ampersand so that it recognizes when the inputs are logical?

TRUE & FALSE == FALSE

etc.


Solution

  • You'll need to use the S3 object system in R:

    `&` <- function(e1, e2) UseMethod("&", c(e1, e2))
    `&.default` <- function(e1, e2) paste(e1, e2)
    `&.logical` <- function(e1, e2) .Primitive("&")(e1, e2)
    

    Now you can use & as you would expect:

    > 1 & 2
    [1] "1 2"
    > TRUE & FALSE
    [1] FALSE
    > "Hello" & "World"
    [1] "Hello World"
    >