[R] Lexical scoping is not what I expect
Prof Brian Ripley
ripley at stats.ox.ac.uk
Fri Jun 28 17:16:20 CEST 2013
On 28/06/2013 15:54, John Fox wrote:
> Dear Duncan and Steve,
> Since Steve's example raises it, I've never understood why it's legal to
> change the built-in global "constants" in R, including T and F. That just
> seems to me to set a trap for users. Why not treat these as reserved
> symbols, like TRUE, Inf, etc.?
Because people wanted to use them as names of things. Maybe a T (not t)
And BTW, you can change the value of T for yourself, but you will not
change it for any package code, including R itself, since the base
namespace is ahead of the workspace in namespace scoping. Because of
that, it is years since I have seen anyone actually trip themselves up
>> -----Original Message-----
>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
>> project.org] On Behalf Of Duncan Murdoch
>> Sent: Friday, June 28, 2013 9:40 AM
>> To: S Ellison
>> Cc: r-help at r-project.org
>> Subject: Re: [R] Lexical scoping is not what I expect
>> On 28/06/2013 9:28 AM, S Ellison wrote:
>>>>> I too find R's lexical scoping rules straightforward.
>>>>> However, I'd say that if your code relies on lexical
>>>>> scoping to find something, you should probably rewrite your code.
>>>> Except of course that almost every function relies on lexical
>>>> scoping to some extent!
>>> This could get messy, because a) that's true and b) it actually leads
>> to some genuine risks when 'globals' get redefined or masked*.
>>> How about I amend the assertion to "if your code relies on lexical
>> scoping to find a variable you defined, you should probably rewrite
>> your code."
>>> and leave it at that, subject to some common sense about whether you
>> know what you're doing?
>> That still isn't right, because users should feel free to define
>> functions and call them from their other functions.
>> I think who defined it isn't the issue, the issue is whether it might
>> change unexpectedly. The user owns globalenv(). The package author
>> owns the package namespace. So packages should almost never read or
>> write things directly from/to globalenv() (the user might change them),
>> but they can create their own private environments and write there.
>> Where it gets a little less clear is when the user writes a function.
>> would say functions should never write directly to globalenv(), but
>> perfectly fine to reference constants there (like other functions
>> written by the user). Referencing things there that change is the
>> Duncan Murdoch
>>> Steve E
>>>> sin.deg <- function(deg) sin(deg * pi/180)
>>>  0.7071068
>>> #looks about right
>>>> pi <- 3.2 #Indiana General Assembly bill #247, 1897.
>>>  0.7173561
>>> #oops ...
>>> This email and any attachments are confidential. Any
>>> R-help at r-project.org mailing list
>>> PLEASE do read the posting guide http://www.R-project.org/posting-
>>> and provide commented, minimal, self-contained, reproducible code.
>> R-help at r-project.org mailing list
>> PLEASE do read the posting guide http://www.R-project.org/posting-
>> and provide commented, minimal, self-contained, reproducible code.
> R-help at r-project.org mailing list
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help