[R] Lexical scoping is not what I expect

John Fox jfox at mcmaster.ca
Fri Jun 28 17:59:51 CEST 2013


Dear Brian,

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Prof Brian Ripley
> Sent: Friday, June 28, 2013 11:16 AM
> To: r-help at r-project.org
> Subject: Re: [R] Lexical scoping is not what I expect
> 
> 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)
> statistic.
> 
> 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
> over this.

I was unaware that the base namespace is ahead of the workspace in this
context, and that effectively answers my objection.

Thanks,
 John

> 
> >
> > Best,
> >   John
> >
> >> -----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.
> >> I
> >> would say functions should never write directly to globalenv(), but
> >> it's
> >> perfectly fine to reference constants there (like other functions
> >> written by the user).  Referencing things there that change is the
> >> risky
> >> thing.
> >>
> >> Duncan Murdoch
> >>
> >>
> >>>
> >>> Steve E
> >>>
> >>>
> >>> *Example
> >>>> sin.deg  <- function(deg) sin(deg * pi/180)
> >>>> sin.deg(45)
> >>> [1] 0.7071068
> >>> 	#looks about right
> >>>
> >>>> pi <- 3.2       #Indiana General Assembly bill #247, 1897.
> >>>> sin.deg(45)
> >>> [1] 0.7173561
> >>> 	#oops ...
> >>>
> >>>
> >>>
> >>>
> >>> *******************************************************************
> >>> This email and any attachments are confidential. Any
> >> use...{{dropped:8}}
> >>>
> >>> ______________________________________________
> >>> R-help at r-project.org mailing list
> >>> https://stat.ethz.ch/mailman/listinfo/r-help
> >>> PLEASE do read the posting guide http://www.R-project.org/posting-
> >> guide.html
> >>> and provide commented, minimal, self-contained, reproducible code.
> >>
> >> ______________________________________________
> >> R-help at r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide http://www.R-project.org/posting-
> >> guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > 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
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list