超载Ampersand& R中的运算符

时间:2014-01-17 22:51:07

标签: r polymorphism ampersand

我喜欢用粘贴重载我的&符号运算符。这样我就可以轻松粘贴东西了。像这样:

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

我实现这一目标的方式是:

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

这一切都很好,但是你失去了使用&符作为自然“和”操作符的能力。什么是最好,最快最美的方式来重载我的&符号,以便它能识别输入是否合乎逻辑?

TRUE & FALSE == FALSE

2 个答案:

答案 0 :(得分:5)

您需要在R:

中使用S3对象系统
`&` <- function(e1, e2) UseMethod("&", c(e1, e2))
`&.default` <- function(e1, e2) paste(e1, e2)
`&.logical` <- function(e1, e2) .Primitive("&")(e1, e2)

现在您可以按预期使用&

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

答案 1 :(得分:4)

我认为定义&.default使用paste是错误的:

`&` <- 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