[R] Lexical scoping is not what I expect

Duncan Murdoch murdoch.duncan at gmail.com
Fri Jun 28 15:40:18 CEST 2013


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.



More information about the R-help mailing list