如何最直接地为字符重载'+'运算符?我已经定义了'%+%' <- function(...) paste(...,sep="")
:
str <- "aa"%+%"bb"%+%"cc" #str="aabbcc"
但我不喜欢这种语法。我认为 str <- "aa"+"bb"+"cc"
更好看一些。
(我正在构建长的SQL查询以与RODBC一起使用,通常的paste
在这种情况下不太方便。有什么建议吗?)
如何最直接地为字符重载'+'运算符?我已经定义了'%+%' <- function(...) paste(...,sep="")
:
str <- "aa"%+%"bb"%+%"cc" #str="aabbcc"
但我不喜欢这种语法。我认为 str <- "aa"+"bb"+"cc"
更好看一些。
(我正在构建长的SQL查询以与RODBC一起使用,通常的paste
在这种情况下不太方便。有什么建议吗?)
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> }
这会给出:
R> 2+3
[1] 5
R> "aa"+"bb"
[1] "aabb"
但是正如Sacha所指出的那样,重载这样一个基本函数非常危险,我无法保证它不会破坏您的R会话并使您的计算机爆炸:-)
rm()
掉被重载的函数。他/她已经被警告了。 :) - Roman Luštrik'%+%' <- function(x,y) paste(x,y,sep="")
"a"%+%"b"%+%"C"
[1] "abC"
+
,但是在这样做时一定要非常小心,因为你会破坏R中最重要的函数之一。我想不出为什么你会选择这样做而不是使用%+%
:# '+' <- function(x,y) paste(x,y,sep="")
# "a"+"b"+"C"
# [1] "abC"
rm('+')
我将其注释掉以确保我不会意外破坏某人的R :)
+.SQL
,然后将向量定义为具有该类。这样你就不会破坏其他人的函数。请参见https://dev59.com/k2445IYBdhLWcg3ws8dq#4731547。 - adamleerich'+'.string <- function(
。 - JonnyRobbie为什么通常的“粘贴”功能不太方便?它就是为此而设计的。建议如下:
编写一个自定义的粘贴函数,以实现您想要的功能。也许您只是不喜欢一直输入“sep =””。因此,编写一个调用带有sep = ""的paste函数的函数,或其他类似的操作。
使用字符串拼接构建长SQL查询可能会导致潜在的失败。请参见http://xkcd.com/327/,其中有一个经典的例子。
另一种可能性是使用某种模板解决方案。我过去曾使用过brew软件包,非常适合这种情况。
paste
函数且sep=""
的函数。但这正是paste0()
的作用! - Gaffi