From P.Dalgaard at biostat.ku.dk  Tue Nov 18 15:07:04 2008
From: P.Dalgaard at biostat.ku.dk (Peter Dalgaard)
Date: Tue, 18 Nov 2008 15:07:04 +0100
Subject: [Rd] assign("FALSE", TRUE)
In-Reply-To: <18722.49097.70529.650997@stat.math.ethz.ch>
References: <3EFAB5FA-61AF-4646-8C17-288838AB075B@auckland.ac.nz>	<18721.60440.551783.840625@cmath-5.math.ethz.ch>	<4921F798.6010006@biostat.ku.dk>
	<18722.49097.70529.650997@stat.math.ethz.ch>
Message-ID: <4922CC08.40301@biostat.ku.dk>

Martin Maechler wrote:
>>>>>> "PD" == Peter Dalgaard <p.dalgaard at biostat.ku.dk>
>>>>>>     on Tue, 18 Nov 2008 00:00:40 +0100 writes:
> 
>     PD> Martin Maechler wrote:
>     >> But in spite of all that I agree that I'd have liked
>     >> `FALSE` <- <whatever> to signal an error about the fact
>     >> that it is a reserved word.
>     >> 
>     RT> This is clearly not a very important issue, but it might
>     RT> bear some thinking about.
>     >> 
>     >> Yes.  I'd propose that R-core look into how to make
>     >> assignment to a reserved word an error.
> 
>     PD> I disagree. In a sense, this is the point of having the
>     PD> backtick operator: allowing you to work with names that
>     PD> would otherwise be syntax errors (notice that such names
>     PD> are sometimes created outside your control, e.g. via
>     PD> column names in data frames). If you start disallowing
>     PD> some of them again, well, that way lies madness!
> 
> No, no. I'm not against allowing names that are otherwise syntax
> errors.  They were always possible via assign().
> I just am convinced we should not allow reserved words.

Please unconvince yourself then... You are solving a problem that isn't
there: In R, you can assign to `FALSE` and access it as `FALSE`. You can
not access it as FALSE because that is a keyword and you cannot assign
to FALSE either.

> { S / S-plus does not either and gives a nice error message:
> 
>   S> assign("FALSE", TRUE)
>   Problem: The name "FALSE" is reserved -- assignments to it are not allowed 
> }

But FALSE is not a keyword in S. In R this would correspond to locking
down F and T.

There's another issue, namely that some keywords do have associated
functions; e.g., `if` exists as a variable, and walls do come tumbling
down if you redefine it (to a different function). However, that is a
completely different thing, more related to redefining "+".
(Incidentally, how hard would it be to ensure that such symbols were
always looked up in the base namespace?).


-- 
   O__  ---- Peter Dalgaard             ?ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907



[Rd] assign("FALSE", TRUE)
Peter Dalgaard