Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的操作重载_R_String_Concatenation_String Concatenation - Fatal编程技术网

R中的操作重载

R中的操作重载,r,string,concatenation,string-concatenation,R,String,Concatenation,String Concatenation,对字符重载“+”最直接的方法是什么? 我定义了“%+%”我认为使用两个参数比点要好: '%+%' <- function(x,y) paste(x,y,sep="") "a"%+%"b"%+%"C" [1] "abC" 注释出来,以确保我不会意外地弄坏某人(R:)您可以尝试这样的方法: R> oldplus <- `+` R> `+` <- function(e1, e2) { R> if (is.character(e1) &&

对字符重载“+”最直接的方法是什么?
我定义了
“%+%”我认为使用两个参数比点要好:

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

"a"%+%"b"%+%"C"
[1] "abC"

注释出来,以确保我不会意外地弄坏某人(R:)

您可以尝试这样的方法:

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>  }

但是正如Sacha所指出的,重载这样一个基本函数是非常危险的,我不能向你保证它不会中断你的R会话并使你的计算机爆炸:-)

为什么通常的“粘贴”不是很方便?这就是它的意义所在。建议:

为自己编写一个不同寻常的粘贴函数,它可以满足您的需要。也许你只是不喜欢一直输入'sep=”“'。因此,编写一个函数,用sep=“”调用粘贴。或者别的什么

无论如何,使用字符串连接构建长SQL查询可能会失败。有关规范示例,请参见


另一种可能性是某种模板解决方案。我以前使用过brew软件包,它非常适合于此。

您可以在
stringi
软件包中找到此运算符


R不支持运算符重载吗?@David Heffernan确实支持。但不允许重新定义某些对象(函数、运算符、常量)。应该可以,但是您必须记住
rm()
重载函数。(S) 他已被警告正确的方法是在特定类(如
+.SQL)上定义运算符,然后将向量定义为具有该类。这样你就不能破坏其他人的功能。看看你是否担心安全性,限制string类的重载不是更好吗?像
'+'.string
一样,编写一个函数,用sep=“”.
调用粘贴,但这就是
paste0()
的用途!
# '+' <- function(x,y) paste(x,y,sep="")
# "a"+"b"+"C"
# [1] "abC"

rm('+')
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"