Ответ 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),"
Это потому, что вы не вызываете (двоичную) функцию "+"
, а унарный оператор +
, который не ожидает аргументов функции и, таким образом, интерпретирует круглые скобки как "арифметический" оператор. Между ними не допускается запятая.