[R] Global variables

Michael Bedward michael.bedward at gmail.com
Tue Jan 11 02:23:22 CET 2011


Hi Sebastian,

You might also find the proto package useful as a way of restricting
the scope of variables. It provides a more intuitive (at least to me)
way of packaging variables and functions up into environments that can
be related in a hierarchy.

Michael

On 10 January 2011 23:48, Sebastien Bihorel
<Sebastien.Bihorel at cognigencorp.com> wrote:
> Thank Gabor and Duncan,
>
> That will be helpful.
>
> Gabor Grothendieck wrote:
>> On Thu, Jan 6, 2011 at 4:59 PM, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
>>
>>> On 06/01/2011 4:45 PM, Sebastien Bihorel wrote:
>>>
>>>> Dear R-users,
>>>>
>>>> Is there a way I can prevent global variables to be visible within my
>>>> functions?
>>>>
>>> Yes, but you probably shouldn't.  You would do it by setting the environment
>>> of the function to something that doesn't have the global environment as a
>>> parent, or grandparent, etc.  The only common examples of that are baseenv()
>>> and emptyenv().  For example,
>>>
>>> x <- 1
>>> f <- function() print(x)
>>>
>>> Then f() will work, and print the 1.  But if I do
>>>
>>> environment(f) <- baseenv()
>>>
>>> then it won't work:
>>>
>>>
>>>> f()
>>>>
>>> Error in print(x) : object 'x' not found
>>>
>>> The problem with doing this is that it is not the way users expect functions
>>> to work, and it will probably have weird side effects.  It is not the way
>>> things work in packages (even packages with namespaces will eventually
>>> search the global environment, the namespace just comes first).  There's no
>>> simple way to do it and yet get access to functions in other packages
>>> besides base without explicitly specifying them (e.g. you'd need to use
>>> stats::lm(), not just lm(), etc.)
>>>
>>>
>>
>> A variation of this would be:
>>
>> environment(f) <- as.environment(2)
>>
>> which would skip over the global environment, .GlobEnv, but would
>> still search the loaded packages.  In the example above x would not be
>> found but it still could find lm, etc.
>>
>>
>>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> 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