문제

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.

도움이 되었습니까?

해결책

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"
> 

다른 팁

I think defining &.default to use paste is just wrong:

`&` <- function(e1, e2) UseMethod("&", c(e1, e2))
`&.default` <- function(e1, e2) .Primitive("&")(e1, e2)
`&.character` <- function(e1, e2) paste(e1, e2)
"Hello" & "World"
[1] "Hello World"
 1*0
#[1] 0
 1&0
#[1] FALSE
 1&1
#[1] TRUE
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top