例如 %+% 是做啥的?在 R 中
Posted
技术标签:
【中文标题】例如 %+% 是做啥的?在 R 中【英文标题】:What does eg %+% do? in R例如 %+% 是做什么的?在 R 中 【发布时间】:2010-11-22 16:03:33 【问题描述】:这是一个非常基本的问题——但显然谷歌并不擅长搜索“%+%”之类的字符串。所以我的问题是 - 什么和什么时候使用“%+%”和类似的。我猜它是一种合并?
编辑:好的 - 我相信我的问题得到了回答。 %X% 是某种二元运算符。所以现在我想我会四处搜索有关如何/何时使用这些的知识。我的问题部分受到了昨天的问题的启发——但只是在我在“学习 R”博客上看到这个 post 之后。引起我问题的段落是这样的: 为此,将创建一个具有年度总数的新数据框,然后将其与现有数据集合并(两个数据框中的变量名称应该相同才能正常工作)。然后我们只需更改绘图所基于的数据框。
## add total immigration figures to the plot
total <- cast(df.m, Period ~ ., sum)
total <- rename(total, c("(all)" = "value"))
total$Region <- "Total"
df.m.t <- rbind(total, df.m)
c1 <- c %+% df.m.t
【问题讨论】:
在“EDIT”的代码示例中,您几乎可以肯定想要“+”而不是“%+%”。 【参考方案1】:根据我对manual 的快速浏览,它可能是用户定义的中缀运算符,因此很难说出实际含义是什么......
我认为二进制加法。
【讨论】:
只是普通的 + 是二进制加法,我相信 - %+% 似乎没有分配任何东西。试试 ?Arithmetic 了解更多信息。【参考方案2】:没有普遍定义的%+%
。也许你看过this question from yesterday在哪里
R> '%+%' <- paste
R> "foo" %+% "bar"
[1] "foo bar"
R>
并定义了临时字符串连接函数。一般来说,'percent-operator-percent' 语法对用户定义的两个参数的函数是开放的,但是(AFAIK)没有普遍接受的 %+%
版本,你可以期望它无处不在。
【讨论】:
【参考方案3】:最终的原因是,如果您同时进行通用编程和数值计算,那么拥有大量可用的二元运算符是很有用的。例如,如果您将数字存储在二维数组中,您可能想要将数组元素相乘,或者您可能想要计算两个数组的矩阵乘积。在 Matlab 中这两个运算符是.*
和*
;在 R 中,它们是 *
和 %*%
。 Python 有 resisted attempts 来添加新的运算符,因此 numpy 通过具有两个类来区分这两种产品:数组类按元素相乘,矩阵类在线性代数意义上相乘。
Python 的另一个例子是列表,加号表示连接:[1,2,3]+[4,5] == [1,2,3,4,5]
。但对于 numpy 数组,加号表示元素加法:array([1,2]) + array([4,5]) == array([5,7])
。如果您的代码需要两者兼而有之,则必须在类之间进行转换或使用函数表示法,这会导致代码看起来很麻烦,尤其是涉及数学的地方。
因此,有时使用更多运算符会很方便,而且您可能事先不知道特定应用程序需要哪些类型的运算符。因此,R 的实现者选择将任何名为 %foo%
的东西视为运算符,并且存在几个示例:%in%
是集合成员资格,%x%
是 Kronecker 乘积,%o%
是外部乘积。有关将这一点发挥到极致的语言示例,请参阅Fortress(规范的第 16 节以运算符名称规则开头)。
在您提到的博文中,作者使用了ggplot2 绘图包,它定义%+%
表示两个绘图元素的某种组合。确实它似乎在裸 +
中添加了一个方法(这是一个通用函数,因此您可以定义它对用户定义对象的含义),但它也定义了 %+%
以便您可以使用 @ 的 ggplot2 含义987654340@(不管它是什么)用于其他对象。如果您安装 ggplot2,请键入 require(ggplot2)
和 ?`%+%`
以查看该运算符的文档,并键入 methods(`+`)
以查看已将新定义添加到 +
。
【讨论】:
哇 - 非常感谢 Jouni!多么棒的答案——现在一切都开始变得有意义了:-) Python 3.5 adds a new binary operator,@
,NumPy 将用于矩阵乘法。以上是关于例如 %+% 是做啥的?在 R 中的主要内容,如果未能解决你的问题,请参考以下文章