R中的操作重载

teu*_*cer 5 string r concatenation string-concatenation

为字符重载'+'最直接的方法是什么?我已经定义'%+%' <- function(...) paste(...,sep=""):

str <- "aa"%+%"bb"%+%"cc" #str="aabbcc"
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这种语法.我认为str <- "aa"+"bb"+"cc"会更好.

(我正在构建与RODBC一起使用的长SQL查询,paste在这种情况下通常不是很方便.有什么建议吗?)

jub*_*uba 10

你可以尝试这样的事情:

R> oldplus <- `+`
R> `+` <- function(e1, e2) { 
R>     if (is.character(e1) && is.character(e2)) { 
R>          paste(e1,e2,sep="") 
R>      }
R>      else { 
R>          oldplus(e1,e2) 
R>      } 
R>  }
Run Code Online (Sandbox Code Playgroud)

这使 :

R> 2+3
[1] 5
R> "aa"+"bb"
[1] "aabb"
Run Code Online (Sandbox Code Playgroud)

但正如Sacha指出的那样,重载这样一个基本功能是非常危险的,我无法向你保证它不会破坏你的R会话并使你的计算机爆炸:-)


Sac*_*amp 5

我认为使用两个参数比点更好:

'%+%' <- function(x,y) paste(x,y,sep="")

"a"%+%"b"%+%"C"
[1] "abC"
Run Code Online (Sandbox Code Playgroud)

如果你真的真的想要你可以覆盖+,但在这样做时要小心谨慎,因为你将破坏R中最重要的功能之一.我想不出你为什么要这样做的任何理由%+%:

# '+' <- function(x,y) paste(x,y,sep="")
# "a"+"b"+"C"
# [1] "abC"

rm('+')
Run Code Online (Sandbox Code Playgroud)

评论它以确保我不会意外地打破某人R :)