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

tim*_*ime 7 r

从R的语法帮助页面的详细信息部分:

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

什么是一元加/减?

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

Hri*_*iev 12

运算符的arity告诉它运行了多少个参数.一元对单个参数起作用,二元对两个参数起作用,三元作用于三个参数,等等.

-a
^
Run Code Online (Sandbox Code Playgroud)

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

a - b
  ^
Run Code Online (Sandbox Code Playgroud)

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


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

> -(-2:2)
[1]  2  1  0 -1 -2
Run Code Online (Sandbox Code Playgroud)

或作为函数调用:

> `-`(-2:2)
[1]  2  1  0 -1 -2
Run Code Online (Sandbox Code Playgroud)

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

> 1:5 - 5:1
[1] -4 -2  0  2  4
Run Code Online (Sandbox Code Playgroud)

或作为函数调用:

> `-`(1:5, 5:1)
[1] -4 -2  0  2  4
Run Code Online (Sandbox Code Playgroud)

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

> `-`
function (e1, e2)  .Primitive("-")
Run Code Online (Sandbox Code Playgroud)

当两个参数都存在时,它执行二进制减号的运算,即e2e1元素减去.当仅e1存在时,它作为一元减号运算并且符号反转元素e1.

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

> sum
function (..., na.rm = FALSE)  .Primitive("sum")
Run Code Online (Sandbox Code Playgroud)

+运营商只需要一个或两个:

> `+`(1, 2, 3)
Error in `+`(1, 2, 3) : operator needs one or two arguments
Run Code Online (Sandbox Code Playgroud)