为角色重载'+'最直接的方法是什么?
我已定义'%+%' <- function(...) paste(...,sep="")
:
str <- "aa"%+%"bb"%+%"cc" #str="aabbcc"
但我不喜欢语法。我认为str <- "aa"+"bb"+"cc"
会更好。
(我正在构建用于RODBC的长SQL查询,通常paste
在这种情况下不是很方便。有什么建议吗?)
答案 0 :(得分:9)
您可以尝试这样的事情:
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会话并使你的计算机爆炸: - )
答案 1 :(得分:5)
我认为使用两个参数比点更好:
'%+%' <- 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:)
答案 2 :(得分:2)
为什么通常的'粘贴'不是很方便?这就是它的意义所在。建议:
给自己写一个不寻常的粘贴功能,可以做你想要的。也许你只是不喜欢一直输入'sep =“”'。所以编写一个用sep =“”调用paste的函数。或者其他什么。
使用字符串连接构建长SQL查询无论如何都可能失败。有关规范示例,请参阅http://xkcd.com/327/。
另一种可能性是某种模板解决方案。我过去曾经使用过brew包,它非常棒。
答案 3 :(得分:0)
您可以在stringi
包中找到此运算符。