[Rd] assign("FALSE", TRUE)
Martin Maechler
maechler at stat.math.ethz.ch
Wed Nov 19 10:37:39 CET 2008
>>>>> "PD" == Peter Dalgaard <P.Dalgaard at biostat.ku.dk>
>>>>> on Tue, 18 Nov 2008 15:07:04 +0100 writes:
PD> 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.
PD> Please unconvince yourself then... You are solving a
PD> problem that isn't there: In R, you can assign to
PD> `FALSE` and access it as `FALSE`. You can not access it
PD> as FALSE because that is a keyword and you cannot assign
PD> to FALSE either.
I now have been "unconvinced",
((so the following is just some clarification ...))
but notably not mainly by the above. I'd consider the backtick
operator as -- very nice -- syntactic sugar for
assign() and get().
And, for "normal" identifiers,
foo <- 1
`foo` <- 1
assign("foo", 1)
and
foo
`foo`
get("foo")
are each three-fold equivalent. If a user does not *know* about
keywords/reserved words, (s)he can get a bit confused by
how e.g. break or `break` e.g. are handled:
Recall that Joe Average User does not know about assign, get,
`..` etc, but does know about ls() and typing an object name:
If he does ls(), sees "break" (which stems from previous
assign("break", 3) or `break` <- 3)
and then types
> break
or
> str(break)
into the R console to inspect the variable he has "seen" in
ls(), the result will be a bit confusing to such
a user, and I had wanted that we'd evade that confusion.
The example with FALSE or `FALSE` is different but with similar
potential confusion.
>> { 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 }
PD> But FALSE is not a keyword in S. In R this would
PD> correspond to locking down F and T.
Hmm,... maybe. Brian has already answered to that.
Martin
PD> There's another issue, namely that some keywords do have
PD> associated functions; e.g., `if` exists as a variable,
PD> and walls do come tumbling down if you redefine it (to a
PD> different function). However, that is a completely
PD> different thing, more related to redefining "+".
PD> (Incidentally, how hard would it be to ensure that such
PD> symbols were always looked up in the base namespace?).
PD> -- O__ ---- Peter Dalgaard Øster Farimagsgade 5, Entr.B
PD> c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014
PD> Cph. K (*) \(*) -- University of Copenhagen Denmark Ph:
PD> (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)
PD> FAX: (+45) 35327907
PD> ______________________________________________
PD> R-devel at r-project.org mailing list
PD> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list