[Rd] Status of reserved keywords and builtins

Duncan Murdoch murdoch.duncan at gmail.com
Thu Dec 12 21:22:45 CET 2013

On 12/12/2013 2:08 PM, Karl Millar wrote:
> According to http://cran.r-project.org/doc/manuals/r-release/R-lang.html#Reserved-words
>    if else repeat while function for in next break
>    NA NA_integer_ NA_real_ NA_complex_ NA_character_
>    ... ..1 ..2 etc.
> are all reserved keywords.
> However, in R 3.0.2 you can do things like:
>     `if` <- function(cond, val1, val2) val2
> after which
>     if(TRUE) 1 else 2
> returns 2.
> Similarly, users can change the implementation of `<-`, `(`, `{`, `||` and `&&`.
> Two questions:
>    - Is this intended behaviour?

I would say yes.
>    - If so, would it be a good idea to change the language definition
> to prevent this?

I would say not.  In the case of "if", what sophisticated users would 
expect to happen from

  if (TRUE) 1 else 2

is that the `if` function will be called with arguments TRUE, 1, 2.

> Doing so would both have the benefits that users
> could count on keywords having their normal interpretation, and allow
> R implementations to implement these more efficiently, including not
> having to lookup the symbol each time.  It'd break any code that
> assumes that this is valid, but hopefully there's little or no code
> that does.

It would have those benefits, but it would be harder to prototype 
changes by actually replacing the `if` function.  Implementations that 
want to optimize the calls have other ways to do it, e.g. the sorts of 
things the compiler does.

Duncan Murdoch

More information about the R-devel mailing list