R中的一元加/减是什么?

What is unary plus / minus in R?

来自 R 的 Syntax 帮助页面的详细信息部分:

The following unary and binary operators are defined. They are listed in precedence groups, from highest to lowest.
[some operators]
- + unary minus and plus
[some more operators]
+ - (binary) add, subtract

什么是一元plus/minus?

R中一元加(+)/减(-)和二进制加(+)或减(-)的区别在哪里?

运算符的 arity 表示它运算了多少个参数。一元处理单个参数,二元处理两个参数,三元处理三个参数,等等。

-a
^

那是一元减号。它否定了它后面的 单个 argument/expression 的值。您可能会认为它是一个像 minus(a) 这样的函数调用,它改变了它的参数的符号,结果是 returns。一元加号也存在,但它基本上是一个空操作。

a - b
  ^

那是二进制负数。它取其两个arguments/expressions的值,并从第一个中减去第二个。您可能会认为它是一个像 minus(a,b) 这样的函数调用,它接受两个参数和 returns 它们的差值。二进制加上returns的总和。


正如@BondedDust 所指出的,在 R(以及其他支持向量处理的语言)中,一些运算符实际上采用向量参数,然后分别对每个元素执行它们的操作。例如,一元负号反转向量的所有元素:

> -(-2:2)
[1]  2  1  0 -1 -2

或作为函数调用:

> `-`(-2:2)
[1]  2  1  0 -1 -2

二进制减法按元素减去两个向量:

> 1:5 - 5:1
[1] -4 -2  0  2  4

或作为函数调用:

> `-`(1:5, 5:1)
[1] -4 -2  0  2  4

R 中的减号运算符是一个有两个参数的函数:

> `-`
function (e1, e2)  .Primitive("-")

当两个参数都存在时,它执行二进制减法运算,即从 e1 元素中减去 e2。当仅存在 e1 时,它作为一元减号运算,并对 e1.

的元素进行符号反转

这同样适用于加号运算符。必须小心,不要将加号运算符 +sum 函数混淆。 + 对一个(作为一元运算符)或两个(作为二元运算符)向量参数进行 element-wise 运算,而 sum 对其中存在的所有值求和争论。虽然 sum 可以接受任意数量的参数:

> sum
function (..., na.rm = FALSE)  .Primitive("sum")

+ 运算符只需要一两个:

> `+`(1, 2, 3)
Error in `+`(1, 2, 3) : operator needs one or two arguments