【问题标题】:Why doesn't "+" operate on characters in R?为什么“+”不对R中的字符进行操作?
【发布时间】:2010-11-22 03:01:08
【问题描述】:

叫我懒惰,但我只是讨厌一直输入paste("a","b",sep='') 之类的东西。

我知道“(t)他是 R。没有如果,只有如何。” (library(fortunes);(fortune(109))。所以,我的后续问题是:是否可以轻松改变这种行为?

【问题讨论】:

  • 问题是如何在字符上定义'+'。你想要 sep = "" 但其他人可能更喜欢默认的 sep = " "。如果两个元素之一不是字符(数字,逻辑)怎么办。那么'+'应该如何定义呢?
  • "+" 将是二元运算符,因此 'sep' 参数不相关。可以做出选择(“字符”+数字等),但我(我怀疑大多数人)会接受任何决定,包括只允许连接字符。例如,这就是 python 所做的。下面马丁链接的讨论真的很有趣。

标签: r syntax operators


【解决方案1】:

@Dirk:这一次,你不太对。这不是解析器。 一个可以在 R 中为“+”编写方法——help(“+”) 转到“算术运算符”并提到 这些是通用的,您可以为它们编写方法......当然,许多包编写者都这样做,例如,我们为“Matrix”包做,我也为“Rmpfr”包做,例如。 但是 Dirk 也是对的(当然!)你目前不能在 R 中做到这一点, 只需为“+.character”定义一个方法。

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

这是一个有趣的讨论,有很多优点和缺点, 尤其是 John Chambers(“S 之父,因此 R”)非常强烈地反对将“+”用于可交换的操作, 还有r-devel archived msg2(由另一个 R 核心成员),支持我们(R 核心)不应该采纳/支持这个想法的观点;如果人们**真的*想要它,他们可以定义 %+%。

【讨论】:

  • 我注意到 Hadley 在他的 ggplot2 包中为“+”写了一些方法。用于在绘图上添加多个图层。
  • 您从那里开始的优秀主题,谢谢!那些不相信将“+”视为连接是自然的(例如钱伯斯)与那些一直在其他语言中看到它并习惯它的人之间似乎存在冲突。讨论就这样停止了吗?
【解决方案2】:

使用sprintf 是否更方便?

除此之外,这个小把戏怎么样:

'%+%' <- paste

'and' %+% 'now' %+% 'for'%+% 'something' %+% 'completely' %+% 'different'    
# [1] "and now for something completely different"

【讨论】:

  • sprintf 在默认情况下(无格式)不再方便,但我应该更频繁地使用它。感谢您使用“%+%”的建议,尽管这实际上并不能回答主要问题。
  • 没有答案——由于解析器的工作方式,您不能将 + 作为运算符覆盖。史蒂夫的建议是你最好的选择,除了可能定义一个快捷函数 p
  • 好的,我们终于找到了fortune(109)的反例。更准确地说,答案是“编写你自己的该死的解析器”:)
猜你喜欢
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多