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

时间:2015-01-02 07:34:24

标签: r

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

  

定义了以下一元和二元运算符。它们被列出来了   在优先组中,从最高到最低   [一些经营者]
   - +一元减号和加号   [更多运营商]
  + - (二进制)加,减

什么是一元加/减?

R中的一元加(+)/减号( - )和二元加法(+)或减法( - )之间的区别在哪里?

1 个答案:

答案 0 :(得分:12)

运算符的 arity 告诉它运行了多少个参数。一元可以在单个参数上工作,二元可以在两个参数上工作,三元可以在三个参数上工作,等等。

-a
^

这是一元减。它否定了它后面的单个参数/表达式的价值。您可能会将其视为像minus(a)这样的函数调用,它会更改其参数的符号并将其作为结果返回。一元加上也存在,但它基本上是无操作。

a - b
  ^

这是二进制减号。它取其两个参数/表达式的值,并从第一个中减去第二个。您可能会将其视为一个函数调用,如minus(a,b),它接受​​两个参数并返回它们的区别。二进制加返回总和。


如@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("-")

当两个参数都存在时,它执行二进制减号的操作,即从e2逐个元素减去e1。仅当e1存在时,它将作为一元减号运算并对e1的元素进行符号反转。

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

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

+运算符只需要一两个:

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