为什么"+"不对R中的字符进行操作?

Edu*_*oni 22 syntax r operators

叫我懒,但我只是讨厌像往常一样打字paste("a","b",sep='').

我知道"(t)他是R.不管怎样,只有如何." (library(fortunes);(fortune(109)).所以,我的后续问题是:是否有可能轻易改变这种行为?

Mar*_*ler 26

@ Dirk:一次,你不太对劲.它不是解析器.一个写入的R用"+"的方法-帮助("+")变为"算术运算符",并提到,这些都是通用的,你可以写方法他们......当然还有很多包作家做,例如,我们为'Matrix'包做了,我也做了"Rmpfr"包,例如但是Dirk也是正确的(当然!)你现在不能在R中做到这一点,只需为"+ .character定义一个方法" ".

大约三年前,我在R-devel(R开发的R邮件列表)上开始了一个主题;如果你对这些主题感兴趣,非常推荐;如果你不想订阅,你也可以通过Gmane访问:r-devel archived msg

它引起了一场有趣的讨论,有很多优点和缺点,特别是约翰·钱伯斯("S和R的父亲")非常强烈反对使用"+"进行不可交换的操作,并且r-devel存档msg2(由另一个R-core成员),支持我们(R Core)不应该采纳/支持这个想法的观点; 如果人们**真的想要它,他们可以为此定义%+%.

  • 我注意到Hadley在他的ggplot2包中为"+"写了一些方法.用于在绘图上添加多个图层. (2认同)
  • 你在那里开始的优秀主题,谢谢!似乎在那些不相信将"+"视为连接(例如钱伯斯)的人与那些在其他语言中一直看到它并习惯它的人之间存在冲突.讨论是否只是停在那里? (2认同)

Ste*_*lou 6

使用sprintf对您来说更方便吗?

除此之外,这个小小的手掌怎么样:

'%+%' <- paste

'and' %+% 'now' %+% 'for'%+% 'something' %+% 'completely' %+% 'different'    
# [1] "and now for something completely different"
Run Code Online (Sandbox Code Playgroud)

  • 没有答案 - 由于解析器的工作方式,您无法覆盖+作为运算符.史蒂夫的建议是你最好的选择,除了可能定义一个快捷函数p < - function(...)paste(...,sep =""),它可能比通常的paste()更容易输入sep =" ". (2认同)