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会话并使你的计算机爆炸:-)
我认为使用两个参数比点更好:
'%+%' <- 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 :)