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.?
Best, John > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-bounces@r- > project.org] On Behalf Of Duncan Murdoch > Sent: Friday, June 28, 2013 9:40 AM > To: S Ellison > Cc: r-help@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@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@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@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.