从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)
当两个参数都存在时,它执行二进制减号的运算,即e2从e1元素减去.当仅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)