Что такое унарный плюс / минус в R?

из раздела подробности R's синтаксис помогите страницы:

определены следующие унарные и двоичные операторы. Они перечислены в группах приоритета, от самого высокого до самого низкого.
[некоторые операторы]
- +унарные минус и плюс
[еще несколько операторов]
+ - (двоичный) добавить, вычесть

Что такое унарный плюс/минус ?

где разница между унарным плюс (+) / минус ( - ) и двоичным сложение ( + ) или вычитание ( -) в R?

1 ответов


на арности оператора говорит о том, сколько аргументов она работает. Унарные работы над одним аргументом, двоичные работы над двумя аргументами, троичные работы над тремя аргументами и т. д.

-a
^

это унарный минус. Это отрицает значение один аргумент/выражение, что следует за ним. Вы можете думать об этом как вызов функции, например minus(a) это изменяет знак своего аргумента и возвращает его в результате. Unary plus также существует, но это в принципе нет.

a - b
  ^

это двоичный минус. Он принимает значение его два аргумента выражения/ и вычитает второй из первого. Вы можете думать об этом как вызов функции, например minus(a,b), которая принимает два аргумента и возвращает их разницу. Binary plus возвращает сумму.


как отметил @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. Нужно быть осторожным и не путать оператор плюс + С