Рассматривать арифметические операторы как функции

Я читал, что все в R функционирует. Поэтому я задаюсь вопросом, является ли функция "+" слишком и если мы можем написать что-то вроде этого:

xx <- c(1,2,3)
yy <- c(1,2,3,4,5,6)

# zz is the sum of the two lengths
zz <- +(if(exists("xx")) length(xx), if(exists("yy")) length(yy))

Ответы

Ответ 1

Да, вы можете:

xx <- c(1,2,3)
yy <- c(1,2,3,4,5,6)

# zz is the sum of the two lengths
zz <- `+`(if(exists("xx")) length(xx), if(exists("yy")) length(yy))
#[1] 9

Чтобы вызвать объекты, у которых нет синтаксически допустимых имен (например, функция +, которая будет вызвана неявно, если вы сделаете что-то вроде 1 + 2), вам нужно заключить имя в backticks (`) или кавычки (" или ').

См. также раздел 3.1.4 Определение языка R:

За исключением синтаксиса, нет никакой разницы между применением оператора и вызовом функции. Фактически, x + y можно эквивалентно записать `+` (x, y). Обратите внимание, что поскольку "+" является нестандартным именем функции, его нужно указывать.

В вашем коде вы получите сообщение об ошибке:

Error: unexpected ',' in "zz <- +(if(exists("xx")) length(xx),"

Это потому, что вы не вызываете (двоичную) функцию "+", а унарный оператор +, который не ожидает аргументов функции и, таким образом, интерпретирует круглые скобки как "арифметический" оператор. Между ними не допускается запятая.