在 R 中通过 base::if() 访问 if 语句

Access the if statement via base::if() in R

我在 R 中编码,出于稳定性目的,当我必须部署某些东西时,我使用语法 package::function(arguments) 调用每个函数,只是为了避免使用时可能发生的冲突很多包裹。这些年来对我帮助很大。

我知道 if 是一个保留字,所以从技术上讲,某人不可能(或者至少在我看来应该如此)定义一个对象并将其命名为 if

我也知道它属于控制流语句(我认为这是一个不同的“东西”)并且由于之前的考虑我也知道以下问题可能没有用。我的纯技术疑虑是:

  1. 为什么我把它包含在反引号函数 class returns 结果是“函数”?
  2. 为什么没有反引号我会出错?最后也是最重要的
  3. 为什么我无法通过通常的 base::if() 语法访问它?

正如我所说,很可能是无用的问题,但此时我对它下面的细节感到好奇。

> class(if)
Error: unexpected ')' in "class(if)"

> class(`if`)
[1] "function"

> base::if(T) T
Error: unexpected 'if' in "base::if"
> if(T) T
[1] TRUE
> base::if(`T`) T
Error: unexpected 'if' in "base::if"

if-with-backticks 实际上 returns .Primitive("if")

"Internal vs Primitive" 上的 R 语言定义部分指定 .Primitive 对象包括

“Special functions” which really are language elements, but implemented as primitive functions:

{ ( if for while repeat break next return function quote switch

没有反引号 base::if 的裸“if”不起作用的原因是上面的“语言元素”被 R 视为特殊情况解析器。输入 base:: 后,R 的解析器会期望下一个符号是可以在 base 命名空间中查找的常规符号。 base::ifbase::forbase::( 都是 return 错误,因为 R 不希望这些特殊元素出现在输入流的这个位置 ;它们在语法上不正确。